appium 2.0.0-beta.3 → 2.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +215 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +238 -132
  5. package/build/lib/cli/args.d.ts +20 -0
  6. package/build/lib/cli/args.d.ts.map +1 -0
  7. package/build/lib/cli/args.js +96 -282
  8. package/build/lib/cli/driver-command.d.ts +36 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +19 -12
  11. package/build/lib/cli/extension-command.d.ts +345 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +171 -96
  14. package/build/lib/cli/extension.d.ts +14 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -16
  17. package/build/lib/cli/parser.d.ts +79 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +152 -95
  20. package/build/lib/cli/plugin-command.d.ts +39 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +18 -13
  23. package/build/lib/cli/utils.d.ts +29 -0
  24. package/build/lib/cli/utils.d.ts.map +1 -0
  25. package/build/lib/cli/utils.js +27 -3
  26. package/build/lib/config-file.d.ts +100 -0
  27. package/build/lib/config-file.d.ts.map +1 -0
  28. package/build/lib/config-file.js +136 -0
  29. package/build/lib/config.d.ts +40 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +92 -67
  32. package/build/lib/constants.d.ts +48 -0
  33. package/build/lib/constants.d.ts.map +1 -0
  34. package/build/lib/constants.js +60 -0
  35. package/build/lib/extension/driver-config.d.ts +84 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +190 -0
  38. package/build/lib/extension/extension-config.d.ts +170 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +297 -0
  41. package/build/lib/extension/index.d.ts +39 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +77 -0
  44. package/build/lib/extension/manifest.d.ts +174 -0
  45. package/build/lib/extension/manifest.d.ts.map +1 -0
  46. package/build/lib/extension/manifest.js +246 -0
  47. package/build/lib/extension/package-changed.d.ts +11 -0
  48. package/build/lib/extension/package-changed.d.ts.map +1 -0
  49. package/build/lib/extension/package-changed.js +68 -0
  50. package/build/lib/extension/plugin-config.d.ts +62 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +87 -0
  53. package/build/lib/grid-register.d.ts +10 -0
  54. package/build/lib/grid-register.d.ts.map +1 -0
  55. package/build/lib/grid-register.js +21 -25
  56. package/build/lib/logger.d.ts +3 -0
  57. package/build/lib/logger.d.ts.map +1 -0
  58. package/build/lib/logger.js +4 -6
  59. package/build/lib/logsink.d.ts +4 -0
  60. package/build/lib/logsink.d.ts.map +1 -0
  61. package/build/lib/logsink.js +12 -16
  62. package/build/lib/main.d.ts +51 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +174 -82
  65. package/build/lib/schema/arg-spec.d.ts +143 -0
  66. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  67. package/build/lib/schema/arg-spec.js +119 -0
  68. package/build/lib/schema/cli-args.d.ts +19 -0
  69. package/build/lib/schema/cli-args.d.ts.map +1 -0
  70. package/build/lib/schema/cli-args.js +180 -0
  71. package/build/lib/schema/cli-transformers.d.ts +5 -0
  72. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  73. package/build/lib/schema/cli-transformers.js +74 -0
  74. package/build/lib/schema/index.d.ts +3 -0
  75. package/build/lib/schema/index.d.ts.map +1 -0
  76. package/build/lib/schema/index.js +34 -0
  77. package/build/lib/schema/keywords.d.ts +24 -0
  78. package/build/lib/schema/keywords.d.ts.map +1 -0
  79. package/build/lib/schema/keywords.js +70 -0
  80. package/build/lib/schema/schema.d.ts +259 -0
  81. package/build/lib/schema/schema.d.ts.map +1 -0
  82. package/build/lib/schema/schema.js +452 -0
  83. package/build/lib/utils.d.ts +66 -0
  84. package/build/lib/utils.d.ts.map +1 -0
  85. package/build/lib/utils.js +35 -139
  86. package/build/tsconfig.tsbuildinfo +1 -0
  87. package/index.js +11 -0
  88. package/lib/appium-config.schema.json +278 -0
  89. package/lib/appium.js +398 -155
  90. package/lib/cli/args.js +174 -377
  91. package/lib/cli/driver-command.js +22 -7
  92. package/lib/cli/extension-command.js +372 -177
  93. package/lib/cli/extension.js +32 -10
  94. package/lib/cli/parser.js +252 -83
  95. package/lib/cli/plugin-command.js +19 -6
  96. package/lib/cli/utils.js +22 -2
  97. package/lib/config-file.js +223 -0
  98. package/lib/config.js +169 -69
  99. package/lib/constants.js +78 -0
  100. package/lib/extension/driver-config.js +249 -0
  101. package/lib/extension/extension-config.js +458 -0
  102. package/lib/extension/index.js +102 -0
  103. package/lib/extension/manifest.js +486 -0
  104. package/lib/extension/package-changed.js +63 -0
  105. package/lib/extension/plugin-config.js +113 -0
  106. package/lib/grid-register.js +25 -22
  107. package/lib/logger.js +1 -1
  108. package/lib/logsink.js +14 -7
  109. package/lib/main.js +233 -83
  110. package/lib/schema/arg-spec.js +232 -0
  111. package/lib/schema/cli-args.js +261 -0
  112. package/lib/schema/cli-transformers.js +122 -0
  113. package/lib/schema/index.js +2 -0
  114. package/lib/schema/keywords.js +134 -0
  115. package/lib/schema/schema.js +734 -0
  116. package/lib/utils.js +85 -129
  117. package/package.json +62 -85
  118. package/scripts/postinstall.js +71 -0
  119. package/types/appium-manifest.d.ts +61 -0
  120. package/types/cli.d.ts +134 -0
  121. package/types/extension.d.ts +56 -0
  122. package/types/external-manifest.d.ts +58 -0
  123. package/types/index.d.ts +7 -0
  124. package/CHANGELOG.md +0 -3515
  125. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  126. package/build/lib/cli/npm.js +0 -206
  127. package/build/lib/cli/parser-helpers.js +0 -82
  128. package/build/lib/driver-config.js +0 -77
  129. package/build/lib/drivers.js +0 -96
  130. package/build/lib/extension-config.js +0 -251
  131. package/build/lib/plugin-config.js +0 -59
  132. package/build/lib/plugins.js +0 -14
  133. package/lib/cli/npm.js +0 -183
  134. package/lib/cli/parser-helpers.js +0 -79
  135. package/lib/driver-config.js +0 -46
  136. package/lib/drivers.js +0 -81
  137. package/lib/extension-config.js +0 -208
  138. package/lib/plugin-config.js +0 -34
  139. package/lib/plugins.js +0 -10
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsForSchema = exports.getDefaultsForExtension = exports.getArgSpec = exports.getAllArgSpecs = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnsupportedSchemaError = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.RoachHotelMap = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _ajv = _interopRequireDefault(require("ajv"));
13
+
14
+ var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
15
+
16
+ var _lodash = _interopRequireDefault(require("lodash"));
17
+
18
+ var _path = _interopRequireDefault(require("path"));
19
+
20
+ var _constants = require("../constants");
21
+
22
+ var _schema = require("@appium/schema");
23
+
24
+ var _argSpec = require("./arg-spec");
25
+
26
+ var _keywords = require("./keywords");
27
+
28
+ class RoachHotelMap extends Map {
29
+ set(key, value) {
30
+ if (this.has(key)) {
31
+ throw new Error(`${key} is already set`);
32
+ }
33
+
34
+ return super.set(key, value);
35
+ }
36
+
37
+ delete(key) {
38
+ return false;
39
+ }
40
+
41
+ clear() {
42
+ throw new Error(`Cannot clear RoachHotelMap`);
43
+ }
44
+
45
+ }
46
+
47
+ exports.RoachHotelMap = RoachHotelMap;
48
+ const ALLOWED_SCHEMA_EXTENSIONS = new Set(['.json', '.js', '.cjs']);
49
+ exports.ALLOWED_SCHEMA_EXTENSIONS = ALLOWED_SCHEMA_EXTENSIONS;
50
+
51
+ class AppiumSchema {
52
+ _argSpecs = new RoachHotelMap();
53
+ _registeredSchemas = {
54
+ [_constants.DRIVER_TYPE]: new Map(),
55
+ [_constants.PLUGIN_TYPE]: new Map()
56
+ };
57
+ _ajv;
58
+ static _instance;
59
+ _finalizedSchemas = null;
60
+
61
+ constructor() {
62
+ this._ajv = AppiumSchema._instantiateAjv();
63
+ }
64
+
65
+ static create() {
66
+ if (!AppiumSchema._instance) {
67
+ const instance = new AppiumSchema();
68
+ AppiumSchema._instance = instance;
69
+
70
+ _lodash.default.bindAll(instance, ['finalize', 'flatten', 'getAllArgSpecs', 'getArgSpec', 'getDefaults', 'getDefaultsForExtension', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'hasRegisteredSchema', 'reset', 'validate']);
71
+ }
72
+
73
+ return AppiumSchema._instance;
74
+ }
75
+
76
+ hasRegisteredSchema(extType, extName) {
77
+ return this._registeredSchemas[extType].has(extName);
78
+ }
79
+
80
+ isFinalized() {
81
+ return Boolean(this._finalizedSchemas);
82
+ }
83
+
84
+ getAllArgSpecs() {
85
+ return this._argSpecs;
86
+ }
87
+
88
+ finalize() {
89
+ if (this.isFinalized()) {
90
+ return this._finalizedSchemas;
91
+ }
92
+
93
+ const ajv = this._ajv;
94
+
95
+ const baseSchema = _lodash.default.cloneDeep(_schema.AppiumConfigJsonSchema);
96
+
97
+ const addArgSpecs = (schema, extType, extName) => {
98
+ for (let [propName, propSchema] of Object.entries(schema)) {
99
+ const argSpec = _argSpec.ArgSpec.create(propName, {
100
+ dest: propSchema.appiumCliDest,
101
+ defaultValue: propSchema.default,
102
+ extType,
103
+ extName
104
+ });
105
+
106
+ const {
107
+ arg
108
+ } = argSpec;
109
+
110
+ this._argSpecs.set(arg, argSpec);
111
+ }
112
+ };
113
+
114
+ addArgSpecs(_lodash.default.omit(baseSchema.properties.server.properties, [_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE]));
115
+ const finalizedSchemas = {};
116
+
117
+ const finalSchema = _lodash.default.reduce(this._registeredSchemas, (baseSchema, extensionSchemas, extType) => {
118
+ extensionSchemas.forEach((schema, extName) => {
119
+ const $ref = _argSpec.ArgSpec.toSchemaBaseRef(extType, extName);
120
+
121
+ schema.$id = $ref;
122
+ schema.additionalProperties = false;
123
+ baseSchema.properties.server.properties[extType].properties[extName] = {
124
+ $ref,
125
+ $comment: extName
126
+ };
127
+ ajv.validateSchema(schema, true);
128
+ addArgSpecs(schema.properties, extType, extName);
129
+ ajv.addSchema(schema, $ref);
130
+ finalizedSchemas[$ref] = schema;
131
+ });
132
+ return baseSchema;
133
+ }, baseSchema);
134
+
135
+ ajv.addSchema(finalSchema, _argSpec.APPIUM_CONFIG_SCHEMA_ID);
136
+ finalizedSchemas[_argSpec.APPIUM_CONFIG_SCHEMA_ID] = finalSchema;
137
+ ajv.validateSchema(finalSchema, true);
138
+ this._finalizedSchemas = finalizedSchemas;
139
+ return Object.freeze(finalizedSchemas);
140
+ }
141
+
142
+ static _instantiateAjv() {
143
+ const ajv = (0, _ajvFormats.default)(new _ajv.default({
144
+ allErrors: true
145
+ }));
146
+
147
+ _lodash.default.forEach(_keywords.keywords, keyword => {
148
+ ajv.addKeyword(keyword);
149
+ });
150
+
151
+ return ajv;
152
+ }
153
+
154
+ reset() {
155
+ for (const schemaId of Object.keys((_this$_finalizedSchem = this._finalizedSchemas) !== null && _this$_finalizedSchem !== void 0 ? _this$_finalizedSchem : {})) {
156
+ var _this$_finalizedSchem;
157
+
158
+ this._ajv.removeSchema(schemaId);
159
+ }
160
+
161
+ this._argSpecs = new RoachHotelMap();
162
+ this._registeredSchemas = {
163
+ [_constants.DRIVER_TYPE]: new Map(),
164
+ [_constants.PLUGIN_TYPE]: new Map()
165
+ };
166
+ this._finalizedSchemas = null;
167
+ this._ajv = AppiumSchema._instantiateAjv();
168
+ }
169
+
170
+ registerSchema(extType, extName, schema) {
171
+ if (!(extType && extName) || _lodash.default.isUndefined(schema)) {
172
+ throw new TypeError('Expected extension type, extension name, and a defined schema');
173
+ }
174
+
175
+ if (!AppiumSchema.isSupportedSchemaType(schema)) {
176
+ throw new SchemaUnsupportedSchemaError(schema, extType, extName);
177
+ }
178
+
179
+ const normalizedExtName = _lodash.default.kebabCase(extName);
180
+
181
+ if (this.hasRegisteredSchema(extType, normalizedExtName)) {
182
+ if (this._registeredSchemas[extType].get(normalizedExtName) === schema) {
183
+ return;
184
+ }
185
+
186
+ throw new SchemaNameConflictError(extType, extName);
187
+ }
188
+
189
+ this._ajv.validateSchema(schema, true);
190
+
191
+ this._registeredSchemas[extType].set(normalizedExtName, schema);
192
+ }
193
+
194
+ getArgSpec(name, extType, extName) {
195
+ return this._argSpecs.get(_argSpec.ArgSpec.toArg(name, extType, extName));
196
+ }
197
+
198
+ hasArgSpec(name, extType, extName) {
199
+ return this._argSpecs.has(_argSpec.ArgSpec.toArg(name, extType, extName));
200
+ }
201
+
202
+ getDefaults(flatten = true) {
203
+ if (!this.isFinalized()) {
204
+ throw new SchemaFinalizationError();
205
+ }
206
+
207
+ const reducer = flatten ? (defaults, {
208
+ defaultValue,
209
+ dest
210
+ }) => {
211
+ if (!_lodash.default.isUndefined(defaultValue)) {
212
+ defaults[dest] = defaultValue;
213
+ }
214
+
215
+ return defaults;
216
+ } : (defaults, {
217
+ defaultValue,
218
+ dest
219
+ }) => {
220
+ if (!_lodash.default.isUndefined(defaultValue)) {
221
+ _lodash.default.set(defaults, dest, defaultValue);
222
+ }
223
+
224
+ return defaults;
225
+ };
226
+ const retval = {};
227
+ return [...this._argSpecs.values()].reduce(reducer, retval);
228
+ }
229
+
230
+ getDefaultsForExtension(extType, extName) {
231
+ if (!this.isFinalized()) {
232
+ throw new SchemaFinalizationError();
233
+ }
234
+
235
+ const specs = [...this._argSpecs.values()].filter(spec => spec.extType === extType && spec.extName === extName);
236
+ return specs.reduce((defaults, {
237
+ defaultValue,
238
+ rawDest
239
+ }) => {
240
+ if (!_lodash.default.isUndefined(defaultValue)) {
241
+ defaults[rawDest] = defaultValue;
242
+ }
243
+
244
+ return defaults;
245
+ }, {});
246
+ }
247
+
248
+ flatten() {
249
+ const schema = this.getSchema();
250
+ const stack = [{
251
+ properties: schema.properties,
252
+ prefix: []
253
+ }];
254
+ const flattened = [];
255
+
256
+ for (const {
257
+ properties,
258
+ prefix
259
+ } of stack) {
260
+ const pairs = _lodash.default.toPairs(properties);
261
+
262
+ for (const [key, value] of pairs) {
263
+ const {
264
+ properties,
265
+ $ref
266
+ } = value;
267
+
268
+ if (properties) {
269
+ stack.push({
270
+ properties,
271
+ prefix: key === _argSpec.SERVER_PROP_NAME ? [] : [...prefix, key]
272
+ });
273
+ } else if ($ref) {
274
+ let refSchema;
275
+
276
+ try {
277
+ refSchema = this.getSchema($ref);
278
+ } catch (err) {
279
+ throw new SchemaUnknownSchemaError($ref);
280
+ }
281
+
282
+ const {
283
+ normalizedExtName
284
+ } = _argSpec.ArgSpec.extensionInfoFromRootSchemaId($ref);
285
+
286
+ if (!normalizedExtName) {
287
+ throw new ReferenceError(`Could not determine extension name from schema ID ${$ref}. This is a bug.`);
288
+ }
289
+
290
+ stack.push({
291
+ properties: refSchema.properties,
292
+ prefix: [...prefix, key, normalizedExtName]
293
+ });
294
+ } else if (key !== _constants.DRIVER_TYPE && key !== _constants.PLUGIN_TYPE) {
295
+ const [extType, extName] = prefix;
296
+ const argSpec = this.getArgSpec(key, extType, extName);
297
+
298
+ if (!argSpec) {
299
+ throw new ReferenceError(`Unknown argument with key ${key}, extType ${extType} and extName ${extName}. This is a bug.`);
300
+ }
301
+
302
+ flattened.push({
303
+ schema: _lodash.default.cloneDeep(value),
304
+ argSpec
305
+ });
306
+ }
307
+ }
308
+ }
309
+
310
+ return flattened;
311
+ }
312
+
313
+ getSchema(ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
314
+ return this._getValidator(ref).schema;
315
+ }
316
+
317
+ _getValidator(id = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
318
+ const validator = this._ajv.getSchema(id);
319
+
320
+ if (!validator) {
321
+ if (id === _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
322
+ throw new SchemaFinalizationError();
323
+ } else {
324
+ throw new SchemaUnknownSchemaError(id);
325
+ }
326
+ }
327
+
328
+ return validator;
329
+ }
330
+
331
+ validate(value, ref = _argSpec.APPIUM_CONFIG_SCHEMA_ID) {
332
+ const validator = this._getValidator(ref);
333
+
334
+ return !validator(value) && _lodash.default.isArray(validator.errors) ? [...validator.errors] : [];
335
+ }
336
+
337
+ static isAllowedSchemaFileExtension(filename) {
338
+ return ALLOWED_SCHEMA_EXTENSIONS.has(_path.default.extname(filename));
339
+ }
340
+
341
+ static isSupportedSchemaType(schema) {
342
+ return _lodash.default.isPlainObject(schema) && schema.$async !== true;
343
+ }
344
+
345
+ }
346
+
347
+ class SchemaFinalizationError extends Error {
348
+ code = 'APPIUMERR_SCHEMA_FINALIZATION';
349
+
350
+ constructor() {
351
+ super('Schema not yet finalized; `finalize()` must be called first.');
352
+ }
353
+
354
+ }
355
+
356
+ exports.SchemaFinalizationError = SchemaFinalizationError;
357
+
358
+ class SchemaNameConflictError extends Error {
359
+ code = 'APPIUMERR_SCHEMA_NAME_CONFLICT';
360
+ data;
361
+
362
+ constructor(extType, extName) {
363
+ super(`Name for ${extType} schema "${extName}" conflicts with an existing schema`);
364
+ this.data = {
365
+ extType,
366
+ extName
367
+ };
368
+ }
369
+
370
+ }
371
+
372
+ exports.SchemaNameConflictError = SchemaNameConflictError;
373
+
374
+ class SchemaUnknownSchemaError extends ReferenceError {
375
+ code = 'APPIUMERR_SCHEMA_UNKNOWN_SCHEMA';
376
+ data;
377
+
378
+ constructor(schemaId) {
379
+ super(`Unknown schema: "${schemaId}"`);
380
+ this.data = {
381
+ schemaId
382
+ };
383
+ }
384
+
385
+ }
386
+
387
+ exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
388
+
389
+ class SchemaUnsupportedSchemaError extends TypeError {
390
+ code = 'APPIUMERR_SCHEMA_UNSUPPORTED_SCHEMA';
391
+ data;
392
+
393
+ constructor(schema, extType, extName) {
394
+ super((() => {
395
+ let msg = `Unsupported schema from ${extType} "${extName}":`;
396
+
397
+ if (_lodash.default.isBoolean(schema)) {
398
+ return `${msg} schema cannot be a boolean`;
399
+ }
400
+
401
+ if (_lodash.default.isPlainObject(schema)) {
402
+ if (schema.$async) {
403
+ return `${msg} schema cannot be an async schema`;
404
+ }
405
+
406
+ throw new TypeError(`schema IS supported; this error should not be thrown (this is a bug). value of schema: ${JSON.stringify(schema)}`);
407
+ }
408
+
409
+ return `${msg} schema must be a plain object without a true "$async" property`;
410
+ })());
411
+ this.data = {
412
+ schema,
413
+ extType,
414
+ extName
415
+ };
416
+ }
417
+
418
+ }
419
+
420
+ exports.SchemaUnsupportedSchemaError = SchemaUnsupportedSchemaError;
421
+ const appiumSchema = AppiumSchema.create();
422
+ const {
423
+ registerSchema,
424
+ getAllArgSpecs,
425
+ getArgSpec,
426
+ hasArgSpec,
427
+ isFinalized,
428
+ finalize: finalizeSchema,
429
+ reset: resetSchema,
430
+ validate,
431
+ getSchema,
432
+ flatten: flattenSchema,
433
+ getDefaults: getDefaultsForSchema,
434
+ getDefaultsForExtension
435
+ } = appiumSchema;
436
+ exports.getDefaultsForExtension = getDefaultsForExtension;
437
+ exports.getDefaultsForSchema = getDefaultsForSchema;
438
+ exports.flattenSchema = flattenSchema;
439
+ exports.getSchema = getSchema;
440
+ exports.validate = validate;
441
+ exports.resetSchema = resetSchema;
442
+ exports.finalizeSchema = finalizeSchema;
443
+ exports.isFinalized = isFinalized;
444
+ exports.hasArgSpec = hasArgSpec;
445
+ exports.getArgSpec = getArgSpec;
446
+ exports.getAllArgSpecs = getAllArgSpecs;
447
+ exports.registerSchema = registerSchema;
448
+ const {
449
+ isAllowedSchemaFileExtension
450
+ } = AppiumSchema;
451
+ exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIlJvYWNoSG90ZWxNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsImhhcyIsIkVycm9yIiwiZGVsZXRlIiwiY2xlYXIiLCJBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TIiwiU2V0IiwiQXBwaXVtU2NoZW1hIiwiX2FyZ1NwZWNzIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFuY2UiLCJfZmluYWxpemVkU2NoZW1hcyIsImNvbnN0cnVjdG9yIiwiX2luc3RhbnRpYXRlQWp2IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJfIiwiYmluZEFsbCIsImhhc1JlZ2lzdGVyZWRTY2hlbWEiLCJleHRUeXBlIiwiZXh0TmFtZSIsImlzRmluYWxpemVkIiwiQm9vbGVhbiIsImdldEFsbEFyZ1NwZWNzIiwiZmluYWxpemUiLCJhanYiLCJiYXNlU2NoZW1hIiwiY2xvbmVEZWVwIiwiQXBwaXVtQ29uZmlnSnNvblNjaGVtYSIsImFkZEFyZ1NwZWNzIiwic2NoZW1hIiwicHJvcE5hbWUiLCJwcm9wU2NoZW1hIiwiT2JqZWN0IiwiZW50cmllcyIsImFyZ1NwZWMiLCJBcmdTcGVjIiwiZGVzdCIsImFwcGl1bUNsaURlc3QiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0IiwiYXJnIiwib21pdCIsInByb3BlcnRpZXMiLCJzZXJ2ZXIiLCJmaW5hbGl6ZWRTY2hlbWFzIiwiZmluYWxTY2hlbWEiLCJyZWR1Y2UiLCJleHRlbnNpb25TY2hlbWFzIiwiZm9yRWFjaCIsIiRyZWYiLCJ0b1NjaGVtYUJhc2VSZWYiLCIkaWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsIiRjb21tZW50IiwidmFsaWRhdGVTY2hlbWEiLCJhZGRTY2hlbWEiLCJBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCIsImZyZWV6ZSIsIkFqdiIsImFsbEVycm9ycyIsImtleXdvcmRzIiwia2V5d29yZCIsImFkZEtleXdvcmQiLCJyZXNldCIsInNjaGVtYUlkIiwia2V5cyIsInJlbW92ZVNjaGVtYSIsInJlZ2lzdGVyU2NoZW1hIiwiaXNVbmRlZmluZWQiLCJUeXBlRXJyb3IiLCJpc1N1cHBvcnRlZFNjaGVtYVR5cGUiLCJTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yIiwibm9ybWFsaXplZEV4dE5hbWUiLCJrZWJhYkNhc2UiLCJnZXQiLCJTY2hlbWFOYW1lQ29uZmxpY3RFcnJvciIsImdldEFyZ1NwZWMiLCJuYW1lIiwidG9BcmciLCJoYXNBcmdTcGVjIiwiZ2V0RGVmYXVsdHMiLCJmbGF0dGVuIiwiU2NoZW1hRmluYWxpemF0aW9uRXJyb3IiLCJyZWR1Y2VyIiwiZGVmYXVsdHMiLCJyZXR2YWwiLCJ2YWx1ZXMiLCJnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiIsInNwZWNzIiwiZmlsdGVyIiwic3BlYyIsInJhd0Rlc3QiLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsInB1c2giLCJTRVJWRVJfUFJPUF9OQU1FIiwicmVmU2NoZW1hIiwiZXJyIiwiU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJSZWZlcmVuY2VFcnJvciIsInJlZiIsIl9nZXRWYWxpZGF0b3IiLCJpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiaXNBcnJheSIsImVycm9ycyIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsInBhdGgiLCJleHRuYW1lIiwiaXNQbGFpbk9iamVjdCIsIiRhc3luYyIsImNvZGUiLCJkYXRhIiwibXNnIiwiaXNCb29sZWFuIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwcGl1bVNjaGVtYSIsImZpbmFsaXplU2NoZW1hIiwicmVzZXRTY2hlbWEiLCJmbGF0dGVuU2NoZW1hIiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiXSwibWFwcGluZ3MiOiI7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NUQsTUFBTXlHLFlBQVksR0FBR3pILFlBQVksQ0FBQ1UsTUFBYixFQUFyQjtBQUVPLE1BQU07QUFDWHNELEVBQUFBLGNBRFc7QUFFWDdDLEVBQUFBLGNBRlc7QUFHWHNELEVBQUFBLFVBSFc7QUFJWEcsRUFBQUEsVUFKVztBQUtYM0QsRUFBQUEsV0FMVztBQU1YRyxFQUFBQSxRQUFRLEVBQUVzRyxjQU5DO0FBT1g5RCxFQUFBQSxLQUFLLEVBQUUrRCxXQVBJO0FBUVhqQixFQUFBQSxRQVJXO0FBU1hqQixFQUFBQSxTQVRXO0FBVVhYLEVBQUFBLE9BQU8sRUFBRThDLGFBVkU7QUFXWC9DLEVBQUFBLFdBQVcsRUFBRWdELG9CQVhGO0FBWVh6QyxFQUFBQTtBQVpXLElBYVRxQyxZQWJHOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTTtBQUFDWixFQUFBQTtBQUFELElBQWlDN0csWUFBdkMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBpdW1Db25maWdKc29uU2NoZW1hIH0gZnJvbSAnQGFwcGl1bS9zY2hlbWEnO1xuaW1wb3J0IHsgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQsIEFyZ1NwZWMsIFNFUlZFUl9QUk9QX05BTUUgfSBmcm9tICcuL2FyZy1zcGVjJztcbmltcG9ydCB7IGtleXdvcmRzIH0gZnJvbSAnLi9rZXl3b3Jkcyc7XG5cbi8qKlxuICogS2V5L3ZhbHVlIHBhaXJzIGdvIGluLi4uIGJ1dCB0aGV5IGRvbid0IGNvbWUgb3V0LlxuICpcbiAqIEB0ZW1wbGF0ZSBLLFZcbiAqIEBleHRlbmRzIHtNYXA8SyxWPn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJvYWNoSG90ZWxNYXAgZXh0ZW5kcyBNYXAge1xuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICogQHBhcmFtIHtWfSB2YWx1ZVxuICAgKi9cbiAgc2V0IChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIGFscmVhZHkgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWxldGUgKGtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSb2FjaEhvdGVsTWFwYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb2FjaEhvdGVsTWFwPHN0cmluZyxBcmdTcGVjPn1cbiAgICovXG4gIF9hcmdTcGVjcyA9IG5ldyBSb2FjaEhvdGVsTWFwKCk7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBleHRlbnNpb24gbmFtZXMgdG8gc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG5hbWluZyBjb25mbGljdHMuIFRoZSBzY2hlbWFzXG4gICAqIGFyZSBzdG9yZWQgaGVyZSBpbiBtZW1vcnkgdW50aWwgdGhlIGluc3RhbmNlIGlzIF9maW5hbGl6ZWRfLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsTWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+Pn1cbiAgICovXG4gIF9yZWdpc3RlcmVkU2NoZW1hcyA9IHtbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKX07XG5cbiAgLyoqXG4gICAqIEFqdiBpbnN0YW5jZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QWp2fVxuICAgKi9cbiAgX2FqdjtcblxuICAvKipcbiAgICogU2luZ2xldG9uIGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZTtcblxuICAvKipcbiAgICogTG9va3VwIG9mIHNjaGVtYSBJRHMgdG8gZmluYWxpemVkIHNjaGVtYXMuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgaW5jbHVkZSByZWZlcmVuY2VzLCBidXQgcmF0aGVyIHRoZSByb290IHNjaGVtYXMgdGhlbXNlbHZlcy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj99XG4gICAqL1xuICBfZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIEFqdiwgYWRkcyBzdGFuZGFyZCBmb3JtYXRzIGFuZCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICAgKiBAc2VlIGh0dHBzOi8vbnBtLmltL2Fqdi1mb3JtYXRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIHtAbGluayBBcHBpdW1TY2hlbWF9IGluc3RhbmNlcy5cbiAgICpcbiAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBvbmUuXG4gICAqIEJpbmRzIHB1YmxpYyBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUgKCkge1xuICAgIGlmICghQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwaXVtU2NoZW1hKCk7XG4gICAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICAgJ2ZpbmFsaXplJyxcbiAgICAgICAgJ2ZsYXR0ZW4nLFxuICAgICAgICAnZ2V0QWxsQXJnU3BlY3MnLFxuICAgICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAgICdnZXREZWZhdWx0cycsXG4gICAgICAgICdnZXREZWZhdWx0c0ZvckV4dGVuc2lvbicsXG4gICAgICAgICdnZXRTY2hlbWEnLFxuICAgICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAgICdpc0ZpbmFsaXplZCcsXG4gICAgICAgICdyZWdpc3RlclNjaGVtYScsXG4gICAgICAgICdoYXNSZWdpc3RlcmVkU2NoZW1hJyxcbiAgICAgICAgJ3Jlc2V0JyxcbiAgICAgICAgJ3ZhbGlkYXRlJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcHBpdW1TY2hlbWEuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIGdldEFsbEFyZ1NwZWNzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3M7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIHdoZW4gbm8gbW9yZSBzY2hlbWFzIHdpbGwgYmUgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogVGhpcyBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogMS4gSXQgY29tYmluZXMgYWxsIHNjaGVtYXMgZnJvbSBleHRlbnNpb25zIGludG8gdGhlIEFwcGl1bSBjb25maWcgc2NoZW1hLFxuICAgKiAgICB0aGVuIGFkZHMgdGhlIHJlc3VsdCB0byB0aGUgYEFqdmAgaW5zdGFuY2UuXG4gICAqIDIuIEl0IGFkZHMgc2NoZW1hcyBmb3IgX2VhY2hfIGFyZ3VtZW50L3Byb3BlcnR5IGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzLlxuICAgKiAgICBUaGUgQ0xJIHVzZXMgdGhlc2Ugc2NoZW1hcyB0byB2YWxpZGF0ZSBzcGVjaWZpYyBhcmd1bWVudHMuXG4gICAqIDMuIFRoZSBzY2hlbWFzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyAod2hpY2ggaXMgdGhlXG4gICAqICAgIG9ubHkgb25lIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpXG4gICAqXG4gICAqIEFueSBtZXRob2QgaW4gdGhpcyBpbnN0YW5jZSB0aGF0IG5lZWRzIHRvIGludGVyYWN0IHdpdGggdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIHdpbGwgdGhyb3cgaWYgdGhpcyBtZXRob2QgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICpcbiAgICogSWYgdGhlIGluc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkLCB0aGlzIGlzIGEgbm8tb3AuXG4gICAqIEBwdWJsaWNcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgbm90IHZhbGlkXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4+fSBSZWNvcmQgb2Ygc2NoZW1hIElEcyB0byBmdWxsIHNjaGVtYSBvYmplY3RzXG4gICAqL1xuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXM+fSAqLyAoXG4gICAgICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWp2ID0gdGhpcy5fYWp2O1xuXG4gICAgLy8gQWp2IHdpbGwgX211dGF0ZV8gdGhlIHNjaGVtYSwgc28gd2UgbmVlZCB0byBjbG9uZSBpdC5cbiAgICBjb25zdCBiYXNlU2NoZW1hID0gXy5jbG9uZURlZXAoQXBwaXVtQ29uZmlnSnNvblNjaGVtYSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovIChzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJhc2VTY2hlbWE7XG4gICAgICB9LFxuICAgICAgYmFzZVNjaGVtYSxcbiAgICApO1xuXG4gICAgYWp2LmFkZFNjaGVtYShmaW5hbFNjaGVtYSwgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpO1xuICAgIGZpbmFsaXplZFNjaGVtYXNbQVBQSVVNX0NPTkZJR19TQ0hFTUFfSURdID0gZmluYWxTY2hlbWE7XG4gICAgYWp2LnZhbGlkYXRlU2NoZW1hKGZpbmFsU2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBmaW5hbGl6ZWRTY2hlbWFzO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGZpbmFsaXplZFNjaGVtYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgYW5kIGNyZWF0ZXMgYW4gQWp2IGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7QWp2fVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW50aWF0ZUFqdiAoKSB7XG4gICAgY29uc3QgYWp2ID0gYWRkRm9ybWF0cyhcbiAgICAgIG5ldyBBanYoe1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgbm90IG11Y2ggdmFsaWRhdGlvbiBhY3R1YWxseSBoYXBwZW5zXG4gICAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBhZGQgY3VzdG9tIGtleXdvcmRzIHRvIGFqdi4gc2VlIHNjaGVtYS1rZXl3b3Jkcy5qc1xuICAgIF8uZm9yRWFjaChrZXl3b3JkcywgKGtleXdvcmQpID0+IHtcbiAgICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIC0gUmVtb3ZlcyBhbGwgYWRkZWQgc2NoZW1hcyBmcm9tIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICAgKiAtIFNldHMgdGhlIHtAbGluayBBcHBpdW1TY2hlbWEuX2ZpbmFsaXplZCBfZmluYWxpemVkfSBmbGFnIHRvIGBmYWxzZWBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gY2FsbCB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBhZ2FpbiwgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIGZpcnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmb3IgKGNvbnN0IHNjaGVtYUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPz8ge30pKSB7XG4gICAgICB0aGlzLl9hanYucmVtb3ZlU2NoZW1hKHNjaGVtYUlkKTtcbiAgICB9XG4gICAgdGhpcy5fYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSkgfHwgXy5pc1VuZGVmaW5lZChzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lLCBhbmQgYSBkZWZpbmVkIHNjaGVtYScsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5pc1N1cHBvcnRlZFNjaGVtYVR5cGUoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3Ioc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dE5hbWUgPSBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgICBpZiAodGhpcy5oYXNSZWdpc3RlcmVkU2NoZW1hKGV4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lKSkge1xuICAgICAgaWYgKHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmdldChub3JtYWxpemVkRXh0TmFtZSkgPT09IHNjaGVtYSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2Fqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uc2V0KG5vcm1hbGl6ZWRFeHROYW1lLCBzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQXJnU3BlY30gZm9yIHRoZSBnaXZlbiBhcmd1bWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtBcmdTcGVjfHVuZGVmaW5lZH0gQXJnU3BlYyBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuZ2V0KEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBrbm93cyBhYm91dCBhbiBhcmd1bWVudCBieSB0aGUgZ2l2ZW4gYG5hbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjaCBhbiB7QGxpbmsgQXJnU3BlY30gZXhpc3RzXG4gICAqL1xuICBoYXNBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmhhcyhBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYFJlY29yZGAgb2YgYXJndW1lbnQgXCJkZXN0XCIgc3RyaW5ncyB0byBkZWZhdWx0IHZhbHVlcy5cbiAgICpcbiAgICogVGhlIFwiZGVzdFwiIHN0cmluZyBpcyB0aGUgcHJvcGVydHkgbmFtZSBpbiBvYmplY3QgcmV0dXJuZWQgYnlcbiAgICogYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyWydwYXJzZV9hcmdzJ11gLlxuICAgKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAgICogQHBhcmFtIHtGbGF0dGVuZWR9IFtmbGF0dGVuPXRydWVdIC0gSWYgYHRydWVgLCBmbGF0dGVucyB0aGUgcmV0dXJuZWQgb2JqZWN0XG4gICAqIHVzaW5nIFwia2V5cGF0aFwiLXN0eWxlIGtleXMgb2YgdGhlIGZvcm1hdCBgPGV4dFR5cGU+LjxleHROYW1lPi48YXJnTmFtZT5gLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYSBuZXN0ZWQgb2JqZWN0IHVzaW5nIGBleHRUeXBlYCBhbmQgYGV4dE5hbWVgIGFzXG4gICAqIHByb3BlcnRpZXMuIEJhc2UgYXJndW1lbnRzIChzZXJ2ZXIgYXJndW1lbnRzKSBhcmUgYWx3YXlzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAqL1xuICBnZXREZWZhdWx0cyAoZmxhdHRlbiA9IC8qKiBAdHlwZSB7RmxhdHRlbmVkfSAqLyAodHJ1ZSkpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY2FsbGJhY2sgRGVmYXVsdFJlZHVjZXJcbiAgICAgKiBAcGFyYW0ge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gZGVmYXVsdHNcbiAgICAgKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWNcbiAgICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgICAqL1xuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFJlZHVjZXJ9ICovXG4gICAgY29uc3QgcmVkdWNlciA9IGZsYXR0ZW5cbiAgICAgID8gKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICAgIDogKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIF8uc2V0KGRlZmF1bHRzLCBkZXN0LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH07XG5cbiAgICAvKiogQHR5cGUge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gKi9cbiAgICBjb25zdCByZXR2YWwgPSB7fTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5yZWR1Y2UocmVkdWNlciwgcmV0dmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZmxhdHRlbmVkIFJlY29yZCBvZiBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uIEtleXMgd2lsbFxuICAgKiBiZSBvZiBmb3JtYXQgYDxhcmdOYW1lPmAuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT59XG4gICAqL1xuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgY29uc3Qgc3BlY3MgPSBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLmZpbHRlcihcbiAgICAgIChzcGVjKSA9PiBzcGVjLmV4dFR5cGUgPT09IGV4dFR5cGUgJiYgc3BlYy5leHROYW1lID09PSBleHROYW1lLFxuICAgICk7XG4gICAgcmV0dXJuIHNwZWNzLnJlZHVjZSgoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIHJhd0Rlc3R9KSA9PiB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0c1tyYXdEZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiBzY2hlbWEgaW50byBhbiBhcnJheSBvZiBgU2NoZW1hT2JqZWN0YHMgYW5kIGFzc29jaWF0ZWRcbiAgICoge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9LlxuICAgKlxuICAgKiBDb252ZXJ0cyBuZXN0ZWQgZXh0ZW5zaW9uIHNjaGVtYXMgdG8ga2V5cyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kXG4gICAqIG5hbWUuIFVzZWQgd2hlbiB0cmFuc2xhdGluZyB0byBgYXJncGFyc2VgIG9wdGlvbnMgb3IgZ2V0dGluZyB0aGUgbGlzdCBvZlxuICAgKiBkZWZhdWx0IHZhbHVlcyAoc2VlIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9KSBmb3IgQ0xJIG9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlcm1lZGlhdGUgcmVwcnNlbnRhdGlvbiB1c2VkIGJ5IGBjbGktYXJnc2BcbiAgICogbW9kdWxlJ3MgYHRvUGFyc2VyQXJnc2AsIHdoaWNoIGNvbnZlcnRzIHRoZSBmaW5hbGl6ZWQgc2NoZW1hIHRvIHBhcmFtZXRlcnNcbiAgICogdXNlZCBieSBgYXJncGFyc2VgLlxuICAgKiBAdGhyb3dzIElmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICAgKiBAcmV0dXJucyB7RmxhdHRlbmVkU2NoZW1hfVxuICAgKi9cbiAgZmxhdHRlbiAoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoKTtcblxuICAgIC8qKiBAdHlwZSB7IHtwcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W10gfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFsbEFyZ1NwZWNzLFxuICBnZXRBcmdTcGVjLFxuICBoYXNBcmdTcGVjLFxuICBpc0ZpbmFsaXplZCxcbiAgZmluYWxpemU6IGZpbmFsaXplU2NoZW1hLFxuICByZXNldDogcmVzZXRTY2hlbWEsXG4gIHZhbGlkYXRlLFxuICBnZXRTY2hlbWEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5TY2hlbWEsXG4gIGdldERlZmF1bHRzOiBnZXREZWZhdWx0c0ZvclNjaGVtYSxcbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24sXG59ID0gYXBwaXVtU2NoZW1hO1xuZXhwb3J0IGNvbnN0IHtpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9ufSA9IEFwcGl1bVNjaGVtYTtcblxuLyoqXG4gKiBBcHBpdW0gb25seSBzdXBwb3J0cyBzY2hlbWFzIHRoYXQgYXJlIHBsYWluIG9iamVjdHM7IG5vdCBhcnJheXMuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3QgJiB7W2tleTogbnVtYmVyXTogbmV2ZXJ9fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7IHtzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXSB9IEZsYXR0ZW5lZFNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FyZ1NwZWNbJ2RlZmF1bHRWYWx1ZSddfSBBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBlLmcuIGB7ZHJpdmVyOiB7Zm9vOiAnYmFyJ319YCB3aGVyZSBgZm9vYCBpcyB0aGUgYXJnIG5hbWUgYW5kIGBiYXJgIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsUmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPj59IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWVcbiAqL1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9XG4gKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLEZsYXR0ZW5lZCBleHRlbmRzIHRydWUgPyBBcmdTcGVjRGVmYXVsdFZhbHVlIDogQXJnU3BlY0RlZmF1bHRWYWx1ZSB8IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWU+fSBEZWZhdWx0VmFsdWVzXG4gKi9cbiJdfQ==
@@ -0,0 +1,66 @@
1
+ export type ParsedDriverCaps = {
2
+ desiredCaps: Capabilities;
3
+ protocol: string;
4
+ processedJsonwpCapabilities?: any;
5
+ processedW3CCapabilities?: W3CCapabilities | undefined;
6
+ };
7
+ export type InvalidCaps = {
8
+ error: Error;
9
+ protocol: string;
10
+ desiredCaps?: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
11
+ [x: string]: any;
12
+ }> | undefined;
13
+ processedJsonwpCapabilities?: any;
14
+ processedW3CCapabilities?: W3CCapabilities | undefined;
15
+ };
16
+ export type W3CCapabilities = import('@appium/types').W3CCapabilities;
17
+ export type Capabilities = import('@appium/types').Capabilities;
18
+ export type AppiumW3CCapabilities = import('@appium/types').AppiumW3CCapabilities;
19
+ /**
20
+ * Dumps to value to the console using `info` logger.
21
+ *
22
+ * @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.
23
+ */
24
+ export const inspect: (t1: any) => void;
25
+ /**
26
+ * Takes the caps that were provided in the request and translates them
27
+ * into caps that can be used by the inner drivers.
28
+ *
29
+ * @param {any} jsonwpCapabilities
30
+ * @param {W3CCapabilities} w3cCapabilities
31
+ * @param {import('@appium/types').Constraints} constraints
32
+ * @param {import('@appium/types').DefaultCapabilitiesConfig} [defaultCapabilities]
33
+ * @returns {ParsedDriverCaps|InvalidCaps}
34
+ */
35
+ export function parseCapsForInnerDriver(jsonwpCapabilities: any, w3cCapabilities: W3CCapabilities, constraints?: import('@appium/types').Constraints, defaultCapabilities?: import("@appium/types").DefaultCapabilitiesConfig | undefined): ParsedDriverCaps | InvalidCaps;
36
+ /**
37
+ * Takes a capabilities objects and prefixes capabilities with `appium:`
38
+ * @param {Capabilities} caps Desired capabilities object
39
+ * @returns {AppiumW3CCapabilities}
40
+ */
41
+ export function insertAppiumPrefixes(caps: Capabilities): AppiumW3CCapabilities;
42
+ export function getPackageVersion(pkgName: any): any;
43
+ /**
44
+ * Pulls the initial values of Appium settings from the given capabilities argument.
45
+ * Each setting item must satisfy the following format:
46
+ * `setting[setting_name]: setting_value`
47
+ * The capabilities argument itself gets mutated, so it does not contain parsed
48
+ * settings anymore to avoid further parsing issues.
49
+ * Check
50
+ * https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md
51
+ * for more details on the available settings.
52
+ *
53
+ * @param {?Object} caps - Capabilities dictionary. It is mutated if
54
+ * one or more settings have been pulled from it
55
+ * @return {Object} - An empty dictionary if the given caps contains no
56
+ * setting items or a dictionary containing parsed Appium setting names along with
57
+ * their values.
58
+ */
59
+ export function pullSettings(caps: any | null): any;
60
+ /**
61
+ *
62
+ * @param {AppiumW3CCapabilities} caps
63
+ * @returns {Capabilities}
64
+ */
65
+ export function removeAppiumPrefixes(caps: AppiumW3CCapabilities): Capabilities;
66
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBAwOc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AA1O1D;;;;GAIG;AACH,wCAOK;AAEL;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CA2FxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AAED;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AA5DD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB"}