appium 2.0.0-beta.2 → 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.
Files changed (70) hide show
  1. package/README.md +9 -9
  2. package/build/lib/appium-config.schema.json +0 -0
  3. package/build/lib/appium.js +157 -53
  4. package/build/lib/cli/argparse-actions.js +104 -0
  5. package/build/lib/cli/args.js +115 -279
  6. package/build/lib/cli/driver-command.js +11 -1
  7. package/build/lib/cli/extension-command.js +60 -8
  8. package/build/lib/cli/extension.js +30 -7
  9. package/build/lib/cli/npm.js +17 -14
  10. package/build/lib/cli/parser.js +152 -89
  11. package/build/lib/cli/plugin-command.js +11 -1
  12. package/build/lib/cli/utils.js +29 -3
  13. package/build/lib/config-file.js +141 -0
  14. package/build/lib/config.js +76 -61
  15. package/build/lib/driver-config.js +42 -19
  16. package/build/lib/drivers.js +8 -4
  17. package/build/lib/ext-config-io.js +165 -0
  18. package/build/lib/extension-config.js +130 -61
  19. package/build/lib/grid-register.js +22 -24
  20. package/build/lib/logger.js +3 -3
  21. package/build/lib/logsink.js +11 -13
  22. package/build/lib/main.js +197 -77
  23. package/build/lib/plugin-config.js +20 -10
  24. package/build/lib/plugins.js +4 -2
  25. package/build/lib/schema/appium-config-schema.js +252 -0
  26. package/build/lib/schema/arg-spec.js +120 -0
  27. package/build/lib/schema/cli-args.js +173 -0
  28. package/build/lib/schema/cli-transformers.js +76 -0
  29. package/build/lib/schema/index.js +36 -0
  30. package/build/lib/schema/keywords.js +62 -0
  31. package/build/lib/schema/schema.js +357 -0
  32. package/build/lib/utils.js +44 -99
  33. package/lib/appium-config.schema.json +277 -0
  34. package/lib/appium.js +201 -65
  35. package/lib/cli/argparse-actions.js +77 -0
  36. package/lib/cli/args.js +174 -375
  37. package/lib/cli/driver-command.js +4 -0
  38. package/lib/cli/extension-command.js +70 -5
  39. package/lib/cli/extension.js +25 -5
  40. package/lib/cli/npm.js +18 -12
  41. package/lib/cli/parser.js +254 -79
  42. package/lib/cli/plugin-command.js +4 -0
  43. package/lib/cli/utils.js +21 -1
  44. package/lib/config-file.js +227 -0
  45. package/lib/config.js +109 -62
  46. package/lib/driver-config.js +66 -11
  47. package/lib/drivers.js +4 -1
  48. package/lib/ext-config-io.js +287 -0
  49. package/lib/extension-config.js +225 -67
  50. package/lib/grid-register.js +27 -24
  51. package/lib/logger.js +1 -1
  52. package/lib/logsink.js +10 -7
  53. package/lib/main.js +211 -77
  54. package/lib/plugin-config.js +34 -5
  55. package/lib/plugins.js +1 -0
  56. package/lib/schema/appium-config-schema.js +286 -0
  57. package/lib/schema/arg-spec.js +218 -0
  58. package/lib/schema/cli-args.js +273 -0
  59. package/lib/schema/cli-transformers.js +123 -0
  60. package/lib/schema/index.js +2 -0
  61. package/lib/schema/keywords.js +119 -0
  62. package/lib/schema/schema.js +577 -0
  63. package/lib/utils.js +42 -88
  64. package/package.json +55 -80
  65. package/postinstall.js +71 -0
  66. package/types/appium-config.d.ts +197 -0
  67. package/types/types.d.ts +201 -0
  68. package/CHANGELOG.md +0 -3515
  69. package/build/lib/cli/parser-helpers.js +0 -82
  70. package/lib/cli/parser-helpers.js +0 -79
@@ -1,330 +1,166 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
- exports.USE_ALL_PLUGINS = exports.extensionArgs = exports.serverArgs = exports.sharedArgs = void 0;
8
+ Object.defineProperty(exports, "APPIUM_HOME", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _extensionConfig.APPIUM_HOME;
12
+ }
13
+ });
14
+ exports.getExtensionArgs = exports.driverConfig = exports.USE_ALL_PLUGINS = void 0;
15
+ exports.getServerArgs = getServerArgs;
16
+ exports.pluginConfig = void 0;
7
17
 
8
18
  require("source-map-support/register");
9
19
 
10
- var _appiumBaseDriver = require("appium-base-driver");
20
+ var _baseDriver = require("@appium/base-driver");
21
+
22
+ var _lodash = _interopRequireDefault(require("lodash"));
11
23
 
12
- var _parserHelpers = require("./parser-helpers");
24
+ var _driverConfig = _interopRequireDefault(require("../driver-config"));
13
25
 
14
26
  var _extensionConfig = require("../extension-config");
15
27
 
28
+ var _pluginConfig = _interopRequireDefault(require("../plugin-config"));
29
+
30
+ var _cliArgs = require("../schema/cli-args");
31
+
16
32
  const DRIVER_EXAMPLE = 'xcuitest';
17
33
  const PLUGIN_EXAMPLE = 'find_by_image';
18
34
  const USE_ALL_PLUGINS = 'all';
19
35
  exports.USE_ALL_PLUGINS = USE_ALL_PLUGINS;
20
- const sharedArgs = [[['-ah', '--home', '--appium-home'], {
21
- required: false,
22
- defaultValue: process.env.APPIUM_HOME || _extensionConfig.DEFAULT_APPIUM_HOME,
23
- help: 'The path to the directory where Appium will keep installed drivers, plugins, and any other metadata necessary for its operation',
24
- dest: 'appiumHome'
25
- }], [['--log-filters'], {
26
- dest: 'logFilters',
27
- defaultValue: null,
28
- required: false,
29
- help: 'Set the full path to a JSON file containing one or more log filtering rules',
30
- example: '/home/rules.json'
31
- }]];
32
- exports.sharedArgs = sharedArgs;
33
- const serverArgs = [[['--shell'], {
34
- required: false,
35
- defaultValue: null,
36
- help: 'Enter REPL mode',
37
- nargs: 0,
38
- dest: 'shell'
39
- }], [['--plugins'], {
40
- required: false,
41
- defaultValue: [],
42
- help: `A comma-separated list of installed plugin names that should be active for this ` + `server. To activate all plugins, you can use the single string "${USE_ALL_PLUGINS}" ` + `as the value (e.g. --plugins=${USE_ALL_PLUGINS})`,
43
- type: _parserHelpers.parsePluginNames,
44
- dest: 'plugins'
45
- }], [['--allow-cors'], {
46
- required: false,
47
- defaultValue: false,
48
- action: 'storeTrue',
49
- help: 'Whether the Appium server should allow web browser connections from any host',
50
- nargs: 0,
51
- dest: 'allowCors'
52
- }], [['--reboot'], {
53
- defaultValue: false,
54
- dest: 'reboot',
55
- action: 'storeTrue',
56
- required: false,
57
- help: '(Android-only) reboot emulator after each session and kill it at the end',
58
- nargs: 0
59
- }], [['-a', '--address'], {
60
- defaultValue: '0.0.0.0',
61
- required: false,
62
- example: '0.0.0.0',
63
- help: 'IP Address to listen on',
64
- dest: 'address'
65
- }], [['-p', '--port'], {
66
- defaultValue: 4723,
67
- required: false,
68
- type: 'int',
69
- example: '4723',
70
- help: 'port to listen on',
71
- dest: 'port'
72
- }], [['-pa', '--base-path'], {
73
- required: false,
74
- defaultValue: _appiumBaseDriver.DEFAULT_BASE_PATH,
75
- dest: 'basePath',
76
- example: '/path/prefix',
77
- help: 'Base path to use as the prefix for all webdriver routes running' + `on this server (default: ${_appiumBaseDriver.DEFAULT_BASE_PATH})`
78
- }], [['-ca', '--callback-address'], {
79
- required: false,
80
- dest: 'callbackAddress',
81
- defaultValue: null,
82
- example: '127.0.0.1',
83
- help: 'callback IP Address (default: same as --address)'
84
- }], [['-cp', '--callback-port'], {
85
- required: false,
86
- dest: 'callbackPort',
87
- defaultValue: null,
88
- type: 'int',
89
- example: '4723',
90
- help: 'callback port (default: same as port)'
91
- }], [['--session-override'], {
92
- defaultValue: false,
93
- dest: 'sessionOverride',
94
- action: 'storeTrue',
95
- required: false,
96
- help: 'Enables session override (clobbering)',
97
- nargs: 0
98
- }], [['-g', '--log'], {
99
- defaultValue: null,
100
- dest: 'logFile',
101
- required: false,
102
- example: '/path/to/appium.log',
103
- help: 'Also send log output to this file'
104
- }], [['--log-level'], {
105
- choices: ['info', 'info:debug', 'info:info', 'info:warn', 'info:error', 'warn', 'warn:debug', 'warn:info', 'warn:warn', 'warn:error', 'error', 'error:debug', 'error:info', 'error:warn', 'error:error', 'debug', 'debug:debug', 'debug:info', 'debug:warn', 'debug:error'],
106
- defaultValue: 'debug',
107
- dest: 'loglevel',
108
- required: false,
109
- example: 'debug',
110
- help: 'log level; default (console[:file]): debug[:debug]'
111
- }], [['--log-timestamp'], {
112
- defaultValue: false,
113
- required: false,
114
- help: 'Show timestamps in console output',
115
- nargs: 0,
116
- action: 'storeTrue',
117
- dest: 'logTimestamp'
118
- }], [['--local-timezone'], {
119
- defaultValue: false,
120
- required: false,
121
- help: 'Use local timezone for timestamps',
122
- nargs: 0,
123
- action: 'storeTrue',
124
- dest: 'localTimezone'
125
- }], [['--log-no-colors'], {
126
- defaultValue: false,
127
- required: false,
128
- help: 'Do not use colors in console output',
129
- nargs: 0,
130
- action: 'storeTrue',
131
- dest: 'logNoColors'
132
- }], [['-G', '--webhook'], {
133
- defaultValue: null,
134
- required: false,
135
- example: 'localhost:9876',
136
- dest: 'webhook',
137
- help: 'Also send log output to this HTTP listener'
138
- }], [['--nodeconfig'], {
139
- required: false,
140
- defaultValue: null,
141
- dest: 'nodeconfig',
142
- help: 'Configuration JSON file to register appium with selenium grid',
143
- example: '/abs/path/to/nodeconfig.json'
144
- }], [['--chromedriver-port'], {
145
- defaultValue: null,
146
- dest: 'chromeDriverPort',
147
- required: false,
148
- type: 'int',
149
- example: '9515',
150
- help: 'Port upon which ChromeDriver will run. If not given, Android driver will pick a random available port.'
151
- }], [['--chromedriver-executable'], {
152
- defaultValue: null,
153
- dest: 'chromedriverExecutable',
154
- required: false,
155
- help: 'ChromeDriver executable full path'
156
- }], [['--show-config'], {
157
- defaultValue: false,
158
- dest: 'showConfig',
159
- action: 'storeTrue',
160
- required: false,
161
- help: 'Show info about the appium server configuration and exit'
162
- }], [['--no-perms-check'], {
163
- defaultValue: false,
164
- dest: 'noPermsCheck',
165
- action: 'storeTrue',
166
- required: false,
167
- help: 'Bypass Appium\'s checks to ensure we can read/write necessary files'
168
- }], [['--strict-caps'], {
169
- defaultValue: false,
170
- dest: 'enforceStrictCaps',
171
- action: 'storeTrue',
172
- required: false,
173
- help: 'Cause sessions to fail if desired caps are sent in that Appium ' + 'does not recognize as valid for the selected device',
174
- nargs: 0
175
- }], [['--tmp'], {
176
- defaultValue: null,
177
- dest: 'tmpDir',
178
- required: false,
179
- help: 'Absolute path to directory Appium can use to manage temporary ' + 'files, like built-in iOS apps it needs to move around. On *nix/Mac ' + 'defaults to /tmp, on Windows defaults to C:\\Windows\\Temp'
180
- }], [['--trace-dir'], {
181
- defaultValue: null,
182
- dest: 'traceDir',
183
- required: false,
184
- help: 'Absolute path to directory Appium use to save ios instruments ' + 'traces, defaults to <tmp dir>/appium-instruments'
185
- }], [['--debug-log-spacing'], {
186
- dest: 'debugLogSpacing',
187
- defaultValue: false,
188
- action: 'storeTrue',
189
- required: false,
190
- help: 'Add exaggerated spacing in logs to help with visual inspection'
191
- }], [['--suppress-adb-kill-server'], {
192
- dest: 'suppressKillServer',
193
- defaultValue: false,
194
- action: 'storeTrue',
195
- required: false,
196
- help: '(Android-only) If set, prevents Appium from killing the adb server instance',
197
- nargs: 0
198
- }], [['--long-stacktrace'], {
199
- dest: 'longStacktrace',
200
- defaultValue: false,
201
- required: false,
202
- action: 'storeTrue',
203
- help: 'Add long stack traces to log entries. Recommended for debugging only.'
204
- }], [['--webkit-debug-proxy-port'], {
205
- defaultValue: 27753,
206
- dest: 'webkitDebugProxyPort',
207
- required: false,
208
- type: 'int',
209
- example: '27753',
210
- help: '(IOS-only) Local port used for communication with ios-webkit-debug-proxy'
211
- }], [['--webdriveragent-port'], {
212
- defaultValue: 8100,
213
- dest: 'wdaLocalPort',
214
- required: false,
215
- type: 'int',
216
- example: '8100',
217
- help: '(IOS-only, XCUITest-only) Local port used for communication with WebDriverAgent'
218
- }], [['-dc', '--default-capabilities'], {
219
- dest: 'defaultCapabilities',
220
- defaultValue: {},
221
- type: _parserHelpers.parseDefaultCaps,
222
- required: false,
223
- example: '[ \'{"app": "myapp.app", "deviceName": "iPhone Simulator"}\' ' + '| /path/to/caps.json ]',
224
- help: 'Set the default desired capabilities, which will be set on each ' + 'session unless overridden by received capabilities.'
225
- }], [['--relaxed-security'], {
226
- defaultValue: false,
227
- dest: 'relaxedSecurityEnabled',
228
- action: 'storeTrue',
229
- required: false,
230
- help: 'Disable additional security checks, so it is possible to use some advanced features, provided ' + 'by drivers supporting this option. Only enable it if all the ' + 'clients are in the trusted network and it\'s not the case if a client could potentially ' + 'break out of the session sandbox. Specific features can be overridden by ' + 'using the --deny-insecure flag',
231
- nargs: 0
232
- }], [['--allow-insecure'], {
233
- dest: 'allowInsecure',
234
- defaultValue: [],
235
- type: _parserHelpers.parseSecurityFeatures,
236
- required: false,
237
- example: 'execute_driver_script,adb_shell',
238
- help: 'Set which insecure features are allowed to run in this server\'s sessions. ' + 'Features are defined on a driver level; see documentation for more details. ' + 'This should be either a comma-separated list of feature names, or a path to ' + 'a file where each feature name is on a line. Note that features defined via ' + '--deny-insecure will be disabled, even if also listed here.'
239
- }], [['--deny-insecure'], {
240
- dest: 'denyInsecure',
241
- defaultValue: [],
242
- type: _parserHelpers.parseSecurityFeatures,
243
- required: false,
244
- example: 'execute_driver_script,adb_shell',
245
- help: 'Set which insecure features are not allowed to run in this server\'s sessions. ' + 'Features are defined on a driver level; see documentation for more details. ' + 'This should be either a comma-separated list of feature names, or a path to ' + 'a file where each feature name is on a line. Features listed here will not be ' + 'enabled even if also listed in --allow-insecure, and even if --relaxed-security ' + 'is turned on.'
246
- }]];
247
- exports.serverArgs = serverArgs;
248
- const globalExtensionArgs = [[['--json'], {
36
+ const EXTENSION_TYPES = new Set([_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]);
37
+
38
+ const driverConfig = _driverConfig.default.getInstance(_extensionConfig.APPIUM_HOME);
39
+
40
+ exports.driverConfig = driverConfig;
41
+
42
+ const pluginConfig = _pluginConfig.default.getInstance(_extensionConfig.APPIUM_HOME);
43
+
44
+ exports.pluginConfig = pluginConfig;
45
+ const globalExtensionArgs = new Map([[['--json'], {
249
46
  required: false,
250
- defaultValue: false,
251
- action: 'storeTrue',
47
+ default: false,
48
+ action: 'store_true',
252
49
  help: 'Use JSON for output format',
253
- nargs: 0,
254
50
  dest: 'json'
255
- }]];
256
- const extensionArgs = {
257
- [_extensionConfig.DRIVER_TYPE]: {},
258
- [_extensionConfig.PLUGIN_TYPE]: {}
259
- };
260
- exports.extensionArgs = extensionArgs;
51
+ }]]);
52
+
53
+ const getExtensionArgs = _lodash.default.once(function getExtensionArgs() {
54
+ const extensionArgs = {};
55
+
56
+ for (const type of EXTENSION_TYPES) {
57
+ extensionArgs[type] = {
58
+ list: makeListArgs(type),
59
+ install: makeInstallArgs(type),
60
+ uninstall: makeUninstallArgs(type),
61
+ update: makeUpdateArgs(type),
62
+ run: makeRunArgs(type)
63
+ };
64
+ }
65
+
66
+ return extensionArgs;
67
+ });
68
+
69
+ exports.getExtensionArgs = getExtensionArgs;
261
70
 
262
71
  function makeListArgs(type) {
263
- return [...globalExtensionArgs, [['--installed'], {
72
+ return new Map([...globalExtensionArgs, [['--installed'], {
264
73
  required: false,
265
- defaultValue: false,
266
- action: 'storeTrue',
74
+ default: false,
75
+ action: 'store_true',
267
76
  help: `List only installed ${type}s`,
268
- nargs: 0,
269
77
  dest: 'showInstalled'
270
78
  }], [['--updates'], {
271
79
  required: false,
272
- defaultValue: false,
273
- action: 'storeTrue',
80
+ default: false,
81
+ action: 'store_true',
274
82
  help: 'Show information about newer versions',
275
- nargs: 0,
276
83
  dest: 'showUpdates'
277
- }]];
84
+ }]]);
278
85
  }
279
86
 
280
87
  function makeInstallArgs(type) {
281
- return [...globalExtensionArgs, [[type], {
282
- type: 'string',
283
- example: type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE,
284
- help: `Name of the ${type} to install`
88
+ return new Map([...globalExtensionArgs, [[type], {
89
+ type: 'str',
90
+ help: `Name of the ${type} to install, for example: ` + type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE
285
91
  }], [['--source'], {
286
92
  required: false,
287
- defaultValue: null,
288
- type: _parserHelpers.parseInstallTypes,
289
- help: `Where to look for the ${type} if it is not one of Appium's verified ` + `${type}s. Possible values: ${JSON.stringify(_extensionConfig.INSTALL_TYPES)}`,
93
+ default: null,
94
+ choices: _extensionConfig.INSTALL_TYPES,
95
+ help: `Where to look for the ${type} if it is not one of Appium's verified ` + `${type}s. Possible values: ${_extensionConfig.INSTALL_TYPES.join(', ')}`,
290
96
  dest: 'installType'
291
97
  }], [['--package'], {
292
98
  required: false,
293
- defaultValue: null,
294
- type: 'string',
99
+ default: null,
100
+ type: 'str',
295
101
  help: `If installing from Git or GitHub, the package name, as defined in the plugin's ` + `package.json file in the "name" field, cannot be determined automatically, and ` + `should be reported here, otherwise the install will probably fail.`,
296
102
  dest: 'packageName'
297
- }]];
103
+ }]]);
298
104
  }
299
105
 
300
106
  function makeUninstallArgs(type) {
301
- return [...globalExtensionArgs, [[type], {
302
- type: 'string',
303
- example: type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE,
304
- help: 'Name of the driver to uninstall'
305
- }]];
107
+ return new Map([...globalExtensionArgs, [[type], {
108
+ type: 'str',
109
+ help: 'Name of the driver to uninstall, for example: ' + type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE
110
+ }]]);
306
111
  }
307
112
 
308
113
  function makeUpdateArgs(type) {
309
- return [...globalExtensionArgs, [[type], {
310
- type: 'string',
311
- example: type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE,
312
- help: `Name of the ${type} to update, or the word "installed" to update all installed ` + `${type}s. To see available updates, run "appium ${type} list --installed --updates"`
114
+ return new Map([...globalExtensionArgs, [[type], {
115
+ type: 'str',
116
+ help: `Name of the ${type} to update, or the word "installed" to update all installed ` + `${type}s. To see available updates, run "appium ${type} list --installed --updates". ` + 'For example: ' + type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE
313
117
  }], [['--unsafe'], {
314
118
  required: false,
315
- defaultValue: false,
316
- action: 'storeTrue',
317
- nargs: 0,
119
+ default: false,
120
+ action: 'store_true',
318
121
  help: `Include updates that might have a new major revision, and potentially include ` + `breaking changes`
319
- }]];
122
+ }]]);
123
+ }
124
+
125
+ function makeRunArgs(type) {
126
+ return new Map([...globalExtensionArgs, [[type], {
127
+ type: 'str',
128
+ help: `Name of the ${type} to run a script from, for example: ` + type === _extensionConfig.DRIVER_TYPE ? DRIVER_EXAMPLE : PLUGIN_EXAMPLE
129
+ }], [['scriptName'], {
130
+ default: null,
131
+ type: 'str',
132
+ help: `Name of the script to run from the ${type}. The script name must be cached ` + `inside the "scripts" field under "appium" inside the ${type}'s "package.json" file`
133
+ }]]);
134
+ }
135
+
136
+ function getServerArgs() {
137
+ return new Map([...(0, _cliArgs.toParserArgs)({
138
+ overrides: {
139
+ basePath: {
140
+ default: _baseDriver.DEFAULT_BASE_PATH
141
+ }
142
+ }
143
+ }), ...serverArgsDisallowedInConfig]);
320
144
  }
321
145
 
322
- for (const type of [_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]) {
323
- extensionArgs[type].list = makeListArgs(type);
324
- extensionArgs[type].install = makeInstallArgs(type);
325
- extensionArgs[type].uninstall = makeUninstallArgs(type);
326
- extensionArgs[type].update = makeUpdateArgs(type);
327
- }require('source-map-support').install();
146
+ const serverArgsDisallowedInConfig = new Map([[['--shell'], {
147
+ required: false,
148
+ default: null,
149
+ help: 'Enter REPL mode',
150
+ action: 'store_true',
151
+ dest: 'shell'
152
+ }], [['--show-config'], {
153
+ default: false,
154
+ dest: 'showConfig',
155
+ action: 'store_true',
156
+ required: false,
157
+ help: 'Show info about the appium server configuration and exit'
158
+ }], [['--config'], {
159
+ dest: 'configFile',
160
+ type: 'string',
161
+ required: false,
162
+ help: 'Explicit path to Appium configuration file'
163
+ }]]);require('source-map-support').install();
328
164
 
329
165
 
330
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvYXJncy5qcyJdLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiVVNFX0FMTF9QTFVHSU5TIiwic2hhcmVkQXJncyIsInJlcXVpcmVkIiwiZGVmYXVsdFZhbHVlIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9IT01FIiwiREVGQVVMVF9BUFBJVU1fSE9NRSIsImhlbHAiLCJkZXN0IiwiZXhhbXBsZSIsInNlcnZlckFyZ3MiLCJuYXJncyIsInR5cGUiLCJwYXJzZVBsdWdpbk5hbWVzIiwiYWN0aW9uIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJjaG9pY2VzIiwicGFyc2VEZWZhdWx0Q2FwcyIsInBhcnNlU2VjdXJpdHlGZWF0dXJlcyIsImdsb2JhbEV4dGVuc2lvbkFyZ3MiLCJleHRlbnNpb25BcmdzIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIm1ha2VMaXN0QXJncyIsIm1ha2VJbnN0YWxsQXJncyIsInBhcnNlSW5zdGFsbFR5cGVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIklOU1RBTExfVFlQRVMiLCJtYWtlVW5pbnN0YWxsQXJncyIsIm1ha2VVcGRhdGVBcmdzIiwibGlzdCIsImluc3RhbGwiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGNBQWMsR0FBRyxVQUF2QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxlQUF2QjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxLQUF4Qjs7QUFHQSxNQUFNQyxVQUFVLEdBQUcsQ0FDakIsQ0FBQyxDQUFDLEtBQUQsRUFBUSxRQUFSLEVBQWtCLGVBQWxCLENBQUQsRUFBcUM7QUFDbkNDLEVBQUFBLFFBQVEsRUFBRSxLQUR5QjtBQUVuQ0MsRUFBQUEsWUFBWSxFQUFFQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsV0FBWixJQUEyQkMsb0NBRk47QUFHbkNDLEVBQUFBLElBQUksRUFBRSxpSUFINkI7QUFJbkNDLEVBQUFBLElBQUksRUFBRTtBQUo2QixDQUFyQyxDQURpQixFQVFqQixDQUFDLENBQUMsZUFBRCxDQUFELEVBQW9CO0FBQ2xCQSxFQUFBQSxJQUFJLEVBQUUsWUFEWTtBQUVsQk4sRUFBQUEsWUFBWSxFQUFFLElBRkk7QUFHbEJELEVBQUFBLFFBQVEsRUFBRSxLQUhRO0FBSWxCTSxFQUFBQSxJQUFJLEVBQUUsNkVBSlk7QUFLbEJFLEVBQUFBLE9BQU8sRUFBRTtBQUxTLENBQXBCLENBUmlCLENBQW5COztBQWlCQSxNQUFNQyxVQUFVLEdBQUcsQ0FDakIsQ0FBQyxDQUFDLFNBQUQsQ0FBRCxFQUFjO0FBQ1pULEVBQUFBLFFBQVEsRUFBRSxLQURFO0FBRVpDLEVBQUFBLFlBQVksRUFBRSxJQUZGO0FBR1pLLEVBQUFBLElBQUksRUFBRSxpQkFITTtBQUlaSSxFQUFBQSxLQUFLLEVBQUUsQ0FKSztBQUtaSCxFQUFBQSxJQUFJLEVBQUU7QUFMTSxDQUFkLENBRGlCLEVBU2pCLENBQUMsQ0FBQyxXQUFELENBQUQsRUFBZ0I7QUFDZFAsRUFBQUEsUUFBUSxFQUFFLEtBREk7QUFFZEMsRUFBQUEsWUFBWSxFQUFFLEVBRkE7QUFHZEssRUFBQUEsSUFBSSxFQUFHLGtGQUFELEdBQ0MsbUVBQWtFUixlQUFnQixJQURuRixHQUVDLGdDQUErQkEsZUFBZ0IsR0FMeEM7QUFNZGEsRUFBQUEsSUFBSSxFQUFFQywrQkFOUTtBQU9kTCxFQUFBQSxJQUFJLEVBQUU7QUFQUSxDQUFoQixDQVRpQixFQW1CakIsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxFQUFtQjtBQUNqQlAsRUFBQUEsUUFBUSxFQUFFLEtBRE87QUFFakJDLEVBQUFBLFlBQVksRUFBRSxLQUZHO0FBR2pCWSxFQUFBQSxNQUFNLEVBQUUsV0FIUztBQUlqQlAsRUFBQUEsSUFBSSxFQUFFLDhFQUpXO0FBS2pCSSxFQUFBQSxLQUFLLEVBQUUsQ0FMVTtBQU1qQkgsRUFBQUEsSUFBSSxFQUFFO0FBTlcsQ0FBbkIsQ0FuQmlCLEVBNEJqQixDQUFDLENBQUMsVUFBRCxDQUFELEVBQWU7QUFDYk4sRUFBQUEsWUFBWSxFQUFFLEtBREQ7QUFFYk0sRUFBQUEsSUFBSSxFQUFFLFFBRk87QUFHYk0sRUFBQUEsTUFBTSxFQUFFLFdBSEs7QUFJYmIsRUFBQUEsUUFBUSxFQUFFLEtBSkc7QUFLYk0sRUFBQUEsSUFBSSxFQUFFLDBFQUxPO0FBTWJJLEVBQUFBLEtBQUssRUFBRTtBQU5NLENBQWYsQ0E1QmlCLEVBcUNqQixDQUFDLENBQUMsSUFBRCxFQUFPLFdBQVAsQ0FBRCxFQUFzQjtBQUNwQlQsRUFBQUEsWUFBWSxFQUFFLFNBRE07QUFFcEJELEVBQUFBLFFBQVEsRUFBRSxLQUZVO0FBR3BCUSxFQUFBQSxPQUFPLEVBQUUsU0FIVztBQUlwQkYsRUFBQUEsSUFBSSxFQUFFLHlCQUpjO0FBS3BCQyxFQUFBQSxJQUFJLEVBQUU7QUFMYyxDQUF0QixDQXJDaUIsRUE2Q2pCLENBQUMsQ0FBQyxJQUFELEVBQU8sUUFBUCxDQUFELEVBQW1CO0FBQ2pCTixFQUFBQSxZQUFZLEVBQUUsSUFERztBQUVqQkQsRUFBQUEsUUFBUSxFQUFFLEtBRk87QUFHakJXLEVBQUFBLElBQUksRUFBRSxLQUhXO0FBSWpCSCxFQUFBQSxPQUFPLEVBQUUsTUFKUTtBQUtqQkYsRUFBQUEsSUFBSSxFQUFFLG1CQUxXO0FBTWpCQyxFQUFBQSxJQUFJLEVBQUU7QUFOVyxDQUFuQixDQTdDaUIsRUFzRGpCLENBQUMsQ0FBQyxLQUFELEVBQVEsYUFBUixDQUFELEVBQXlCO0FBQ3ZCUCxFQUFBQSxRQUFRLEVBQUUsS0FEYTtBQUV2QkMsRUFBQUEsWUFBWSxFQUFFYSxtQ0FGUztBQUd2QlAsRUFBQUEsSUFBSSxFQUFFLFVBSGlCO0FBSXZCQyxFQUFBQSxPQUFPLEVBQUUsY0FKYztBQUt2QkYsRUFBQUEsSUFBSSxFQUFFLG9FQUNDLDRCQUEyQlEsbUNBQWtCO0FBTjdCLENBQXpCLENBdERpQixFQStEakIsQ0FBQyxDQUFDLEtBQUQsRUFBUSxvQkFBUixDQUFELEVBQWdDO0FBQzlCZCxFQUFBQSxRQUFRLEVBQUUsS0FEb0I7QUFFOUJPLEVBQUFBLElBQUksRUFBRSxpQkFGd0I7QUFHOUJOLEVBQUFBLFlBQVksRUFBRSxJQUhnQjtBQUk5Qk8sRUFBQUEsT0FBTyxFQUFFLFdBSnFCO0FBSzlCRixFQUFBQSxJQUFJLEVBQUU7QUFMd0IsQ0FBaEMsQ0EvRGlCLEVBdUVqQixDQUFDLENBQUMsS0FBRCxFQUFRLGlCQUFSLENBQUQsRUFBNkI7QUFDM0JOLEVBQUFBLFFBQVEsRUFBRSxLQURpQjtBQUUzQk8sRUFBQUEsSUFBSSxFQUFFLGNBRnFCO0FBRzNCTixFQUFBQSxZQUFZLEVBQUUsSUFIYTtBQUkzQlUsRUFBQUEsSUFBSSxFQUFFLEtBSnFCO0FBSzNCSCxFQUFBQSxPQUFPLEVBQUUsTUFMa0I7QUFNM0JGLEVBQUFBLElBQUksRUFBRTtBQU5xQixDQUE3QixDQXZFaUIsRUFnRmpCLENBQUMsQ0FBQyxvQkFBRCxDQUFELEVBQXlCO0FBQ3ZCTCxFQUFBQSxZQUFZLEVBQUUsS0FEUztBQUV2Qk0sRUFBQUEsSUFBSSxFQUFFLGlCQUZpQjtBQUd2Qk0sRUFBQUEsTUFBTSxFQUFFLFdBSGU7QUFJdkJiLEVBQUFBLFFBQVEsRUFBRSxLQUphO0FBS3ZCTSxFQUFBQSxJQUFJLEVBQUUsdUNBTGlCO0FBTXZCSSxFQUFBQSxLQUFLLEVBQUU7QUFOZ0IsQ0FBekIsQ0FoRmlCLEVBeUZqQixDQUFDLENBQUMsSUFBRCxFQUFPLE9BQVAsQ0FBRCxFQUFrQjtBQUNoQlQsRUFBQUEsWUFBWSxFQUFFLElBREU7QUFFaEJNLEVBQUFBLElBQUksRUFBRSxTQUZVO0FBR2hCUCxFQUFBQSxRQUFRLEVBQUUsS0FITTtBQUloQlEsRUFBQUEsT0FBTyxFQUFFLHFCQUpPO0FBS2hCRixFQUFBQSxJQUFJLEVBQUU7QUFMVSxDQUFsQixDQXpGaUIsRUFpR2pCLENBQUMsQ0FBQyxhQUFELENBQUQsRUFBa0I7QUFDaEJTLEVBQUFBLE9BQU8sRUFBRSxDQUNQLE1BRE8sRUFDQyxZQURELEVBQ2UsV0FEZixFQUM0QixXQUQ1QixFQUN5QyxZQUR6QyxFQUVQLE1BRk8sRUFFQyxZQUZELEVBRWUsV0FGZixFQUU0QixXQUY1QixFQUV5QyxZQUZ6QyxFQUdQLE9BSE8sRUFHRSxhQUhGLEVBR2lCLFlBSGpCLEVBRytCLFlBSC9CLEVBRzZDLGFBSDdDLEVBSVAsT0FKTyxFQUlFLGFBSkYsRUFJaUIsWUFKakIsRUFJK0IsWUFKL0IsRUFJNkMsYUFKN0MsQ0FETztBQU9oQmQsRUFBQUEsWUFBWSxFQUFFLE9BUEU7QUFRaEJNLEVBQUFBLElBQUksRUFBRSxVQVJVO0FBU2hCUCxFQUFBQSxRQUFRLEVBQUUsS0FUTTtBQVVoQlEsRUFBQUEsT0FBTyxFQUFFLE9BVk87QUFXaEJGLEVBQUFBLElBQUksRUFBRTtBQVhVLENBQWxCLENBakdpQixFQStHakIsQ0FBQyxDQUFDLGlCQUFELENBQUQsRUFBc0I7QUFDcEJMLEVBQUFBLFlBQVksRUFBRSxLQURNO0FBRXBCRCxFQUFBQSxRQUFRLEVBQUUsS0FGVTtBQUdwQk0sRUFBQUEsSUFBSSxFQUFFLG1DQUhjO0FBSXBCSSxFQUFBQSxLQUFLLEVBQUUsQ0FKYTtBQUtwQkcsRUFBQUEsTUFBTSxFQUFFLFdBTFk7QUFNcEJOLEVBQUFBLElBQUksRUFBRTtBQU5jLENBQXRCLENBL0dpQixFQXdIakIsQ0FBQyxDQUFDLGtCQUFELENBQUQsRUFBdUI7QUFDckJOLEVBQUFBLFlBQVksRUFBRSxLQURPO0FBRXJCRCxFQUFBQSxRQUFRLEVBQUUsS0FGVztBQUdyQk0sRUFBQUEsSUFBSSxFQUFFLG1DQUhlO0FBSXJCSSxFQUFBQSxLQUFLLEVBQUUsQ0FKYztBQUtyQkcsRUFBQUEsTUFBTSxFQUFFLFdBTGE7QUFNckJOLEVBQUFBLElBQUksRUFBRTtBQU5lLENBQXZCLENBeEhpQixFQWlJakIsQ0FBQyxDQUFDLGlCQUFELENBQUQsRUFBc0I7QUFDcEJOLEVBQUFBLFlBQVksRUFBRSxLQURNO0FBRXBCRCxFQUFBQSxRQUFRLEVBQUUsS0FGVTtBQUdwQk0sRUFBQUEsSUFBSSxFQUFFLHFDQUhjO0FBSXBCSSxFQUFBQSxLQUFLLEVBQUUsQ0FKYTtBQUtwQkcsRUFBQUEsTUFBTSxFQUFFLFdBTFk7QUFNcEJOLEVBQUFBLElBQUksRUFBRTtBQU5jLENBQXRCLENBaklpQixFQTBJakIsQ0FBQyxDQUFDLElBQUQsRUFBTyxXQUFQLENBQUQsRUFBc0I7QUFDcEJOLEVBQUFBLFlBQVksRUFBRSxJQURNO0FBRXBCRCxFQUFBQSxRQUFRLEVBQUUsS0FGVTtBQUdwQlEsRUFBQUEsT0FBTyxFQUFFLGdCQUhXO0FBSXBCRCxFQUFBQSxJQUFJLEVBQUUsU0FKYztBQUtwQkQsRUFBQUEsSUFBSSxFQUFFO0FBTGMsQ0FBdEIsQ0ExSWlCLEVBa0pqQixDQUFDLENBQUMsY0FBRCxDQUFELEVBQW1CO0FBQ2pCTixFQUFBQSxRQUFRLEVBQUUsS0FETztBQUVqQkMsRUFBQUEsWUFBWSxFQUFFLElBRkc7QUFHakJNLEVBQUFBLElBQUksRUFBRSxZQUhXO0FBSWpCRCxFQUFBQSxJQUFJLEVBQUUsK0RBSlc7QUFLakJFLEVBQUFBLE9BQU8sRUFBRTtBQUxRLENBQW5CLENBbEppQixFQTBKakIsQ0FBQyxDQUFDLHFCQUFELENBQUQsRUFBMEI7QUFDeEJQLEVBQUFBLFlBQVksRUFBRSxJQURVO0FBRXhCTSxFQUFBQSxJQUFJLEVBQUUsa0JBRmtCO0FBR3hCUCxFQUFBQSxRQUFRLEVBQUUsS0FIYztBQUl4QlcsRUFBQUEsSUFBSSxFQUFFLEtBSmtCO0FBS3hCSCxFQUFBQSxPQUFPLEVBQUUsTUFMZTtBQU14QkYsRUFBQUEsSUFBSSxFQUFFO0FBTmtCLENBQTFCLENBMUppQixFQW1LakIsQ0FBQyxDQUFDLDJCQUFELENBQUQsRUFBZ0M7QUFDOUJMLEVBQUFBLFlBQVksRUFBRSxJQURnQjtBQUU5Qk0sRUFBQUEsSUFBSSxFQUFFLHdCQUZ3QjtBQUc5QlAsRUFBQUEsUUFBUSxFQUFFLEtBSG9CO0FBSTlCTSxFQUFBQSxJQUFJLEVBQUU7QUFKd0IsQ0FBaEMsQ0FuS2lCLEVBMEtqQixDQUFDLENBQUMsZUFBRCxDQUFELEVBQW9CO0FBQ2xCTCxFQUFBQSxZQUFZLEVBQUUsS0FESTtBQUVsQk0sRUFBQUEsSUFBSSxFQUFFLFlBRlk7QUFHbEJNLEVBQUFBLE1BQU0sRUFBRSxXQUhVO0FBSWxCYixFQUFBQSxRQUFRLEVBQUUsS0FKUTtBQUtsQk0sRUFBQUEsSUFBSSxFQUFFO0FBTFksQ0FBcEIsQ0ExS2lCLEVBa0xqQixDQUFDLENBQUMsa0JBQUQsQ0FBRCxFQUF1QjtBQUNyQkwsRUFBQUEsWUFBWSxFQUFFLEtBRE87QUFFckJNLEVBQUFBLElBQUksRUFBRSxjQUZlO0FBR3JCTSxFQUFBQSxNQUFNLEVBQUUsV0FIYTtBQUlyQmIsRUFBQUEsUUFBUSxFQUFFLEtBSlc7QUFLckJNLEVBQUFBLElBQUksRUFBRTtBQUxlLENBQXZCLENBbExpQixFQTBMakIsQ0FBQyxDQUFDLGVBQUQsQ0FBRCxFQUFvQjtBQUNsQkwsRUFBQUEsWUFBWSxFQUFFLEtBREk7QUFFbEJNLEVBQUFBLElBQUksRUFBRSxtQkFGWTtBQUdsQk0sRUFBQUEsTUFBTSxFQUFFLFdBSFU7QUFJbEJiLEVBQUFBLFFBQVEsRUFBRSxLQUpRO0FBS2xCTSxFQUFBQSxJQUFJLEVBQUUsb0VBQ0EscURBTlk7QUFPbEJJLEVBQUFBLEtBQUssRUFBRTtBQVBXLENBQXBCLENBMUxpQixFQW9NakIsQ0FBQyxDQUFDLE9BQUQsQ0FBRCxFQUFZO0FBQ1ZULEVBQUFBLFlBQVksRUFBRSxJQURKO0FBRVZNLEVBQUFBLElBQUksRUFBRSxRQUZJO0FBR1ZQLEVBQUFBLFFBQVEsRUFBRSxLQUhBO0FBSVZNLEVBQUFBLElBQUksRUFBRSxtRUFDQSxxRUFEQSxHQUVBO0FBTkksQ0FBWixDQXBNaUIsRUE2TWpCLENBQUMsQ0FBQyxhQUFELENBQUQsRUFBa0I7QUFDaEJMLEVBQUFBLFlBQVksRUFBRSxJQURFO0FBRWhCTSxFQUFBQSxJQUFJLEVBQUUsVUFGVTtBQUdoQlAsRUFBQUEsUUFBUSxFQUFFLEtBSE07QUFJaEJNLEVBQUFBLElBQUksRUFBRSxtRUFDQTtBQUxVLENBQWxCLENBN01pQixFQXFOakIsQ0FBQyxDQUFDLHFCQUFELENBQUQsRUFBMEI7QUFDeEJDLEVBQUFBLElBQUksRUFBRSxpQkFEa0I7QUFFeEJOLEVBQUFBLFlBQVksRUFBRSxLQUZVO0FBR3hCWSxFQUFBQSxNQUFNLEVBQUUsV0FIZ0I7QUFJeEJiLEVBQUFBLFFBQVEsRUFBRSxLQUpjO0FBS3hCTSxFQUFBQSxJQUFJLEVBQUU7QUFMa0IsQ0FBMUIsQ0FyTmlCLEVBNk5qQixDQUFDLENBQUMsNEJBQUQsQ0FBRCxFQUFpQztBQUMvQkMsRUFBQUEsSUFBSSxFQUFFLG9CQUR5QjtBQUUvQk4sRUFBQUEsWUFBWSxFQUFFLEtBRmlCO0FBRy9CWSxFQUFBQSxNQUFNLEVBQUUsV0FIdUI7QUFJL0JiLEVBQUFBLFFBQVEsRUFBRSxLQUpxQjtBQUsvQk0sRUFBQUEsSUFBSSxFQUFFLDZFQUx5QjtBQU0vQkksRUFBQUEsS0FBSyxFQUFFO0FBTndCLENBQWpDLENBN05pQixFQXNPakIsQ0FBQyxDQUFDLG1CQUFELENBQUQsRUFBd0I7QUFDdEJILEVBQUFBLElBQUksRUFBRSxnQkFEZ0I7QUFFdEJOLEVBQUFBLFlBQVksRUFBRSxLQUZRO0FBR3RCRCxFQUFBQSxRQUFRLEVBQUUsS0FIWTtBQUl0QmEsRUFBQUEsTUFBTSxFQUFFLFdBSmM7QUFLdEJQLEVBQUFBLElBQUksRUFBRTtBQUxnQixDQUF4QixDQXRPaUIsRUE4T2pCLENBQUMsQ0FBQywyQkFBRCxDQUFELEVBQWdDO0FBQzlCTCxFQUFBQSxZQUFZLEVBQUUsS0FEZ0I7QUFFOUJNLEVBQUFBLElBQUksRUFBRSxzQkFGd0I7QUFHOUJQLEVBQUFBLFFBQVEsRUFBRSxLQUhvQjtBQUk5QlcsRUFBQUEsSUFBSSxFQUFFLEtBSndCO0FBSzlCSCxFQUFBQSxPQUFPLEVBQUUsT0FMcUI7QUFNOUJGLEVBQUFBLElBQUksRUFBRTtBQU53QixDQUFoQyxDQTlPaUIsRUF1UGpCLENBQUMsQ0FBQyx1QkFBRCxDQUFELEVBQTRCO0FBQzFCTCxFQUFBQSxZQUFZLEVBQUUsSUFEWTtBQUUxQk0sRUFBQUEsSUFBSSxFQUFFLGNBRm9CO0FBRzFCUCxFQUFBQSxRQUFRLEVBQUUsS0FIZ0I7QUFJMUJXLEVBQUFBLElBQUksRUFBRSxLQUpvQjtBQUsxQkgsRUFBQUEsT0FBTyxFQUFFLE1BTGlCO0FBTTFCRixFQUFBQSxJQUFJLEVBQUU7QUFOb0IsQ0FBNUIsQ0F2UGlCLEVBZ1FqQixDQUFDLENBQUMsS0FBRCxFQUFRLHdCQUFSLENBQUQsRUFBb0M7QUFDbENDLEVBQUFBLElBQUksRUFBRSxxQkFENEI7QUFFbENOLEVBQUFBLFlBQVksRUFBRSxFQUZvQjtBQUdsQ1UsRUFBQUEsSUFBSSxFQUFFSywrQkFINEI7QUFJbENoQixFQUFBQSxRQUFRLEVBQUUsS0FKd0I7QUFLbENRLEVBQUFBLE9BQU8sRUFBRSxrRUFDQSx3QkFOeUI7QUFPbENGLEVBQUFBLElBQUksRUFBRSxxRUFDQTtBQVI0QixDQUFwQyxDQWhRaUIsRUEyUWpCLENBQUMsQ0FBQyxvQkFBRCxDQUFELEVBQXlCO0FBQ3ZCTCxFQUFBQSxZQUFZLEVBQUUsS0FEUztBQUV2Qk0sRUFBQUEsSUFBSSxFQUFFLHdCQUZpQjtBQUd2Qk0sRUFBQUEsTUFBTSxFQUFFLFdBSGU7QUFJdkJiLEVBQUFBLFFBQVEsRUFBRSxLQUphO0FBS3ZCTSxFQUFBQSxJQUFJLEVBQUUsbUdBQ0EsK0RBREEsR0FFQSwwRkFGQSxHQUdBLDJFQUhBLEdBSUEsZ0NBVGlCO0FBVXZCSSxFQUFBQSxLQUFLLEVBQUU7QUFWZ0IsQ0FBekIsQ0EzUWlCLEVBd1JqQixDQUFDLENBQUMsa0JBQUQsQ0FBRCxFQUF1QjtBQUNyQkgsRUFBQUEsSUFBSSxFQUFFLGVBRGU7QUFFckJOLEVBQUFBLFlBQVksRUFBRSxFQUZPO0FBR3JCVSxFQUFBQSxJQUFJLEVBQUVNLG9DQUhlO0FBSXJCakIsRUFBQUEsUUFBUSxFQUFFLEtBSlc7QUFLckJRLEVBQUFBLE9BQU8sRUFBRSxpQ0FMWTtBQU1yQkYsRUFBQUEsSUFBSSxFQUFFLGdGQUNBLDhFQURBLEdBRUEsOEVBRkEsR0FHQSw4RUFIQSxHQUlBO0FBVmUsQ0FBdkIsQ0F4UmlCLEVBcVNqQixDQUFDLENBQUMsaUJBQUQsQ0FBRCxFQUFzQjtBQUNwQkMsRUFBQUEsSUFBSSxFQUFFLGNBRGM7QUFFcEJOLEVBQUFBLFlBQVksRUFBRSxFQUZNO0FBR3BCVSxFQUFBQSxJQUFJLEVBQUVNLG9DQUhjO0FBSXBCakIsRUFBQUEsUUFBUSxFQUFFLEtBSlU7QUFLcEJRLEVBQUFBLE9BQU8sRUFBRSxpQ0FMVztBQU1wQkYsRUFBQUEsSUFBSSxFQUFFLG9GQUNBLDhFQURBLEdBRUEsOEVBRkEsR0FHQSxnRkFIQSxHQUlBLGtGQUpBLEdBS0E7QUFYYyxDQUF0QixDQXJTaUIsQ0FBbkI7O0FBcVRBLE1BQU1ZLG1CQUFtQixHQUFHLENBQzFCLENBQUMsQ0FBQyxRQUFELENBQUQsRUFBYTtBQUNYbEIsRUFBQUEsUUFBUSxFQUFFLEtBREM7QUFFWEMsRUFBQUEsWUFBWSxFQUFFLEtBRkg7QUFHWFksRUFBQUEsTUFBTSxFQUFFLFdBSEc7QUFJWFAsRUFBQUEsSUFBSSxFQUFFLDRCQUpLO0FBS1hJLEVBQUFBLEtBQUssRUFBRSxDQUxJO0FBTVhILEVBQUFBLElBQUksRUFBRTtBQU5LLENBQWIsQ0FEMEIsQ0FBNUI7QUFXQSxNQUFNWSxhQUFhLEdBQUc7QUFBQyxHQUFDQyw0QkFBRCxHQUFlLEVBQWhCO0FBQW9CLEdBQUNDLDRCQUFELEdBQWU7QUFBbkMsQ0FBdEI7OztBQUVBLFNBQVNDLFlBQVQsQ0FBdUJYLElBQXZCLEVBQTZCO0FBQzNCLFNBQU8sQ0FDTCxHQUFHTyxtQkFERSxFQUVMLENBQUMsQ0FBQyxhQUFELENBQUQsRUFBa0I7QUFDaEJsQixJQUFBQSxRQUFRLEVBQUUsS0FETTtBQUVoQkMsSUFBQUEsWUFBWSxFQUFFLEtBRkU7QUFHaEJZLElBQUFBLE1BQU0sRUFBRSxXQUhRO0FBSWhCUCxJQUFBQSxJQUFJLEVBQUcsdUJBQXNCSyxJQUFLLEdBSmxCO0FBS2hCRCxJQUFBQSxLQUFLLEVBQUUsQ0FMUztBQU1oQkgsSUFBQUEsSUFBSSxFQUFFO0FBTlUsR0FBbEIsQ0FGSyxFQVVMLENBQUMsQ0FBQyxXQUFELENBQUQsRUFBZ0I7QUFDZFAsSUFBQUEsUUFBUSxFQUFFLEtBREk7QUFFZEMsSUFBQUEsWUFBWSxFQUFFLEtBRkE7QUFHZFksSUFBQUEsTUFBTSxFQUFFLFdBSE07QUFJZFAsSUFBQUEsSUFBSSxFQUFFLHVDQUpRO0FBS2RJLElBQUFBLEtBQUssRUFBRSxDQUxPO0FBTWRILElBQUFBLElBQUksRUFBRTtBQU5RLEdBQWhCLENBVkssQ0FBUDtBQW1CRDs7QUFHRCxTQUFTZ0IsZUFBVCxDQUEwQlosSUFBMUIsRUFBZ0M7QUFDOUIsU0FBTyxDQUNMLEdBQUdPLG1CQURFLEVBRUwsQ0FBQyxDQUFDUCxJQUFELENBQUQsRUFBUztBQUNQQSxJQUFBQSxJQUFJLEVBQUUsUUFEQztBQUVQSCxJQUFBQSxPQUFPLEVBQUVHLElBQUksS0FBS1MsNEJBQVQsR0FBdUJ4QixjQUF2QixHQUF3Q0MsY0FGMUM7QUFHUFMsSUFBQUEsSUFBSSxFQUFHLGVBQWNLLElBQUs7QUFIbkIsR0FBVCxDQUZLLEVBT0wsQ0FBQyxDQUFDLFVBQUQsQ0FBRCxFQUFlO0FBQ2JYLElBQUFBLFFBQVEsRUFBRSxLQURHO0FBRWJDLElBQUFBLFlBQVksRUFBRSxJQUZEO0FBR2JVLElBQUFBLElBQUksRUFBRWEsZ0NBSE87QUFJYmxCLElBQUFBLElBQUksRUFBRyx5QkFBd0JLLElBQUsseUNBQTlCLEdBQ0MsR0FBRUEsSUFBSyx1QkFBc0JjLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyw4QkFBZixDQUE4QixFQUxyRDtBQU1icEIsSUFBQUEsSUFBSSxFQUFFO0FBTk8sR0FBZixDQVBLLEVBZUwsQ0FBQyxDQUFDLFdBQUQsQ0FBRCxFQUFnQjtBQUNkUCxJQUFBQSxRQUFRLEVBQUUsS0FESTtBQUVkQyxJQUFBQSxZQUFZLEVBQUUsSUFGQTtBQUdkVSxJQUFBQSxJQUFJLEVBQUUsUUFIUTtBQUlkTCxJQUFBQSxJQUFJLEVBQUcsaUZBQUQsR0FDQyxpRkFERCxHQUVDLG9FQU5PO0FBT2RDLElBQUFBLElBQUksRUFBRTtBQVBRLEdBQWhCLENBZkssQ0FBUDtBQXlCRDs7QUFFRCxTQUFTcUIsaUJBQVQsQ0FBNEJqQixJQUE1QixFQUFrQztBQUNoQyxTQUFPLENBQ0wsR0FBR08sbUJBREUsRUFFTCxDQUFDLENBQUNQLElBQUQsQ0FBRCxFQUFTO0FBQ1BBLElBQUFBLElBQUksRUFBRSxRQURDO0FBRVBILElBQUFBLE9BQU8sRUFBRUcsSUFBSSxLQUFLUyw0QkFBVCxHQUF1QnhCLGNBQXZCLEdBQXdDQyxjQUYxQztBQUdQUyxJQUFBQSxJQUFJLEVBQUU7QUFIQyxHQUFULENBRkssQ0FBUDtBQVFEOztBQUVELFNBQVN1QixjQUFULENBQXlCbEIsSUFBekIsRUFBK0I7QUFDN0IsU0FBTyxDQUNMLEdBQUdPLG1CQURFLEVBRUwsQ0FBQyxDQUFDUCxJQUFELENBQUQsRUFBUztBQUNQQSxJQUFBQSxJQUFJLEVBQUUsUUFEQztBQUVQSCxJQUFBQSxPQUFPLEVBQUVHLElBQUksS0FBS1MsNEJBQVQsR0FBdUJ4QixjQUF2QixHQUF3Q0MsY0FGMUM7QUFHUFMsSUFBQUEsSUFBSSxFQUFHLGVBQWNLLElBQUssOERBQXBCLEdBQ0MsR0FBRUEsSUFBSyw0Q0FBMkNBLElBQUs7QUFKdkQsR0FBVCxDQUZLLEVBUUwsQ0FBQyxDQUFDLFVBQUQsQ0FBRCxFQUFlO0FBQ2JYLElBQUFBLFFBQVEsRUFBRSxLQURHO0FBRWJDLElBQUFBLFlBQVksRUFBRSxLQUZEO0FBR2JZLElBQUFBLE1BQU0sRUFBRSxXQUhLO0FBSWJILElBQUFBLEtBQUssRUFBRSxDQUpNO0FBS2JKLElBQUFBLElBQUksRUFBRyxnRkFBRCxHQUNDO0FBTk0sR0FBZixDQVJLLENBQVA7QUFpQkQ7O0FBRUQsS0FBSyxNQUFNSyxJQUFYLElBQW1CLENBQUNTLDRCQUFELEVBQWNDLDRCQUFkLENBQW5CLEVBQStDO0FBQzdDRixFQUFBQSxhQUFhLENBQUNSLElBQUQsQ0FBYixDQUFvQm1CLElBQXBCLEdBQTJCUixZQUFZLENBQUNYLElBQUQsQ0FBdkM7QUFDQVEsRUFBQUEsYUFBYSxDQUFDUixJQUFELENBQWIsQ0FBb0JvQixPQUFwQixHQUE4QlIsZUFBZSxDQUFDWixJQUFELENBQTdDO0FBQ0FRLEVBQUFBLGFBQWEsQ0FBQ1IsSUFBRCxDQUFiLENBQW9CcUIsU0FBcEIsR0FBZ0NKLGlCQUFpQixDQUFDakIsSUFBRCxDQUFqRDtBQUNBUSxFQUFBQSxhQUFhLENBQUNSLElBQUQsQ0FBYixDQUFvQnNCLE1BQXBCLEdBQTZCSixjQUFjLENBQUNsQixJQUFELENBQTNDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX0JBU0VfUEFUSCB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBwYXJzZVNlY3VyaXR5RmVhdHVyZXMsIHBhcnNlRGVmYXVsdENhcHMsIHBhcnNlUGx1Z2luTmFtZXMsIHBhcnNlSW5zdGFsbFR5cGVzIH0gZnJvbSAnLi9wYXJzZXItaGVscGVycyc7XG5pbXBvcnQgeyBJTlNUQUxMX1RZUEVTLCBERUZBVUxUX0FQUElVTV9IT01FLCBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcblxuY29uc3QgRFJJVkVSX0VYQU1QTEUgPSAneGN1aXRlc3QnO1xuY29uc3QgUExVR0lOX0VYQU1QTEUgPSAnZmluZF9ieV9pbWFnZSc7XG5jb25zdCBVU0VfQUxMX1BMVUdJTlMgPSAnYWxsJztcblxuLy8gc2hhcmVkQXJncyB3aWxsIGJlIGFkZGVkIHRvIGV2ZXJ5IHN1YmNvbW1hbmRcbmNvbnN0IHNoYXJlZEFyZ3MgPSBbXG4gIFtbJy1haCcsICctLWhvbWUnLCAnLS1hcHBpdW0taG9tZSddLCB7XG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHRWYWx1ZTogcHJvY2Vzcy5lbnYuQVBQSVVNX0hPTUUgfHwgREVGQVVMVF9BUFBJVU1fSE9NRSxcbiAgICBoZWxwOiAnVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBBcHBpdW0gd2lsbCBrZWVwIGluc3RhbGxlZCBkcml2ZXJzLCBwbHVnaW5zLCBhbmQgYW55IG90aGVyIG1ldGFkYXRhIG5lY2Vzc2FyeSBmb3IgaXRzIG9wZXJhdGlvbicsXG4gICAgZGVzdDogJ2FwcGl1bUhvbWUnLFxuICB9XSxcblxuICBbWyctLWxvZy1maWx0ZXJzJ10sIHtcbiAgICBkZXN0OiAnbG9nRmlsdGVycycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnU2V0IHRoZSBmdWxsIHBhdGggdG8gYSBKU09OIGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZSBsb2cgZmlsdGVyaW5nIHJ1bGVzJyxcbiAgICBleGFtcGxlOiAnL2hvbWUvcnVsZXMuanNvbicsXG4gIH1dLFxuXTtcblxuY29uc3Qgc2VydmVyQXJncyA9IFtcbiAgW1snLS1zaGVsbCddLCB7XG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBoZWxwOiAnRW50ZXIgUkVQTCBtb2RlJyxcbiAgICBuYXJnczogMCxcbiAgICBkZXN0OiAnc2hlbGwnLFxuICB9XSxcblxuICBbWyctLXBsdWdpbnMnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWU6IFtdLFxuICAgIGhlbHA6IGBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGluc3RhbGxlZCBwbHVnaW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgYWN0aXZlIGZvciB0aGlzIGAgK1xuICAgICAgICAgIGBzZXJ2ZXIuIFRvIGFjdGl2YXRlIGFsbCBwbHVnaW5zLCB5b3UgY2FuIHVzZSB0aGUgc2luZ2xlIHN0cmluZyBcIiR7VVNFX0FMTF9QTFVHSU5TfVwiIGAgK1xuICAgICAgICAgIGBhcyB0aGUgdmFsdWUgKGUuZy4gLS1wbHVnaW5zPSR7VVNFX0FMTF9QTFVHSU5TfSlgLFxuICAgIHR5cGU6IHBhcnNlUGx1Z2luTmFtZXMsXG4gICAgZGVzdDogJ3BsdWdpbnMnLFxuICB9XSxcblxuICBbWyctLWFsbG93LWNvcnMnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgaGVscDogJ1doZXRoZXIgdGhlIEFwcGl1bSBzZXJ2ZXIgc2hvdWxkIGFsbG93IHdlYiBicm93c2VyIGNvbm5lY3Rpb25zIGZyb20gYW55IGhvc3QnLFxuICAgIG5hcmdzOiAwLFxuICAgIGRlc3Q6ICdhbGxvd0NvcnMnLFxuICB9XSxcblxuICBbWyctLXJlYm9vdCddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBkZXN0OiAncmVib290JyxcbiAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnKEFuZHJvaWQtb25seSkgcmVib290IGVtdWxhdG9yIGFmdGVyIGVhY2ggc2Vzc2lvbiBhbmQga2lsbCBpdCBhdCB0aGUgZW5kJyxcbiAgICBuYXJnczogMCxcbiAgfV0sXG5cbiAgW1snLWEnLCAnLS1hZGRyZXNzJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6ICcwLjAuMC4wJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZXhhbXBsZTogJzAuMC4wLjAnLFxuICAgIGhlbHA6ICdJUCBBZGRyZXNzIHRvIGxpc3RlbiBvbicsXG4gICAgZGVzdDogJ2FkZHJlc3MnLFxuICB9XSxcblxuICBbWyctcCcsICctLXBvcnQnXSwge1xuICAgIGRlZmF1bHRWYWx1ZTogNDcyMyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgdHlwZTogJ2ludCcsXG4gICAgZXhhbXBsZTogJzQ3MjMnLFxuICAgIGhlbHA6ICdwb3J0IHRvIGxpc3RlbiBvbicsXG4gICAgZGVzdDogJ3BvcnQnLFxuICB9XSxcblxuICBbWyctcGEnLCAnLS1iYXNlLXBhdGgnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgIGRlc3Q6ICdiYXNlUGF0aCcsXG4gICAgZXhhbXBsZTogJy9wYXRoL3ByZWZpeCcsXG4gICAgaGVscDogJ0Jhc2UgcGF0aCB0byB1c2UgYXMgdGhlIHByZWZpeCBmb3IgYWxsIHdlYmRyaXZlciByb3V0ZXMgcnVubmluZycgK1xuICAgICAgICAgIGBvbiB0aGlzIHNlcnZlciAoZGVmYXVsdDogJHtERUZBVUxUX0JBU0VfUEFUSH0pYFxuICB9XSxcblxuICBbWyctY2EnLCAnLS1jYWxsYmFjay1hZGRyZXNzJ10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVzdDogJ2NhbGxiYWNrQWRkcmVzcycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGV4YW1wbGU6ICcxMjcuMC4wLjEnLFxuICAgIGhlbHA6ICdjYWxsYmFjayBJUCBBZGRyZXNzIChkZWZhdWx0OiBzYW1lIGFzIC0tYWRkcmVzcyknLFxuICB9XSxcblxuICBbWyctY3AnLCAnLS1jYWxsYmFjay1wb3J0J10sIHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVzdDogJ2NhbGxiYWNrUG9ydCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHR5cGU6ICdpbnQnLFxuICAgIGV4YW1wbGU6ICc0NzIzJyxcbiAgICBoZWxwOiAnY2FsbGJhY2sgcG9ydCAoZGVmYXVsdDogc2FtZSBhcyBwb3J0KScsXG4gIH1dLFxuXG4gIFtbJy0tc2Vzc2lvbi1vdmVycmlkZSddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBkZXN0OiAnc2Vzc2lvbk92ZXJyaWRlJyxcbiAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnRW5hYmxlcyBzZXNzaW9uIG92ZXJyaWRlIChjbG9iYmVyaW5nKScsXG4gICAgbmFyZ3M6IDAsXG4gIH1dLFxuXG4gIFtbJy1nJywgJy0tbG9nJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgZGVzdDogJ2xvZ0ZpbGUnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBleGFtcGxlOiAnL3BhdGgvdG8vYXBwaXVtLmxvZycsXG4gICAgaGVscDogJ0Fsc28gc2VuZCBsb2cgb3V0cHV0IHRvIHRoaXMgZmlsZScsXG4gIH1dLFxuXG4gIFtbJy0tbG9nLWxldmVsJ10sIHtcbiAgICBjaG9pY2VzOiBbXG4gICAgICAnaW5mbycsICdpbmZvOmRlYnVnJywgJ2luZm86aW5mbycsICdpbmZvOndhcm4nLCAnaW5mbzplcnJvcicsXG4gICAgICAnd2FybicsICd3YXJuOmRlYnVnJywgJ3dhcm46aW5mbycsICd3YXJuOndhcm4nLCAnd2FybjplcnJvcicsXG4gICAgICAnZXJyb3InLCAnZXJyb3I6ZGVidWcnLCAnZXJyb3I6aW5mbycsICdlcnJvcjp3YXJuJywgJ2Vycm9yOmVycm9yJyxcbiAgICAgICdkZWJ1ZycsICdkZWJ1ZzpkZWJ1ZycsICdkZWJ1ZzppbmZvJywgJ2RlYnVnOndhcm4nLCAnZGVidWc6ZXJyb3InLFxuICAgIF0sXG4gICAgZGVmYXVsdFZhbHVlOiAnZGVidWcnLFxuICAgIGRlc3Q6ICdsb2dsZXZlbCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGV4YW1wbGU6ICdkZWJ1ZycsXG4gICAgaGVscDogJ2xvZyBsZXZlbDsgZGVmYXVsdCAoY29uc29sZVs6ZmlsZV0pOiBkZWJ1Z1s6ZGVidWddJyxcbiAgfV0sXG5cbiAgW1snLS1sb2ctdGltZXN0YW1wJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnU2hvdyB0aW1lc3RhbXBzIGluIGNvbnNvbGUgb3V0cHV0JyxcbiAgICBuYXJnczogMCxcbiAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgIGRlc3Q6ICdsb2dUaW1lc3RhbXAnLFxuICB9XSxcblxuICBbWyctLWxvY2FsLXRpbWV6b25lJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnVXNlIGxvY2FsIHRpbWV6b25lIGZvciB0aW1lc3RhbXBzJyxcbiAgICBuYXJnczogMCxcbiAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgIGRlc3Q6ICdsb2NhbFRpbWV6b25lJyxcbiAgfV0sXG5cbiAgW1snLS1sb2ctbm8tY29sb3JzJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiAnRG8gbm90IHVzZSBjb2xvcnMgaW4gY29uc29sZSBvdXRwdXQnLFxuICAgIG5hcmdzOiAwLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgZGVzdDogJ2xvZ05vQ29sb3JzJyxcbiAgfV0sXG5cbiAgW1snLUcnLCAnLS13ZWJob29rJ10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGV4YW1wbGU6ICdsb2NhbGhvc3Q6OTg3NicsXG4gICAgZGVzdDogJ3dlYmhvb2snLFxuICAgIGhlbHA6ICdBbHNvIHNlbmQgbG9nIG91dHB1dCB0byB0aGlzIEhUVFAgbGlzdGVuZXInLFxuICB9XSxcblxuICBbWyctLW5vZGVjb25maWcnXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgZGVzdDogJ25vZGVjb25maWcnLFxuICAgIGhlbHA6ICdDb25maWd1cmF0aW9uIEpTT04gZmlsZSB0byByZWdpc3RlciBhcHBpdW0gd2l0aCBzZWxlbml1bSBncmlkJyxcbiAgICBleGFtcGxlOiAnL2Ficy9wYXRoL3RvL25vZGVjb25maWcuanNvbicsXG4gIH1dLFxuXG4gIFtbJy0tY2hyb21lZHJpdmVyLXBvcnQnXSwge1xuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBkZXN0OiAnY2hyb21lRHJpdmVyUG9ydCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHR5cGU6ICdpbnQnLFxuICAgIGV4YW1wbGU6ICc5NTE1JyxcbiAgICBoZWxwOiAnUG9ydCB1cG9uIHdoaWNoIENocm9tZURyaXZlciB3aWxsIHJ1bi4gSWYgbm90IGdpdmVuLCBBbmRyb2lkIGRyaXZlciB3aWxsIHBpY2sgYSByYW5kb20gYXZhaWxhYmxlIHBvcnQuJyxcbiAgfV0sXG5cbiAgW1snLS1jaHJvbWVkcml2ZXItZXhlY3V0YWJsZSddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGRlc3Q6ICdjaHJvbWVkcml2ZXJFeGVjdXRhYmxlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0Nocm9tZURyaXZlciBleGVjdXRhYmxlIGZ1bGwgcGF0aCcsXG4gIH1dLFxuXG4gIFtbJy0tc2hvdy1jb25maWcnXSwge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgZGVzdDogJ3Nob3dDb25maWcnLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdTaG93IGluZm8gYWJvdXQgdGhlIGFwcGl1bSBzZXJ2ZXIgY29uZmlndXJhdGlvbiBhbmQgZXhpdCcsXG4gIH1dLFxuXG4gIFtbJy0tbm8tcGVybXMtY2hlY2snXSwge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgZGVzdDogJ25vUGVybXNDaGVjaycsXG4gICAgYWN0aW9uOiAnc3RvcmVUcnVlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0J5cGFzcyBBcHBpdW1cXCdzIGNoZWNrcyB0byBlbnN1cmUgd2UgY2FuIHJlYWQvd3JpdGUgbmVjZXNzYXJ5IGZpbGVzJyxcbiAgfV0sXG5cbiAgW1snLS1zdHJpY3QtY2FwcyddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBkZXN0OiAnZW5mb3JjZVN0cmljdENhcHMnLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdDYXVzZSBzZXNzaW9ucyB0byBmYWlsIGlmIGRlc2lyZWQgY2FwcyBhcmUgc2VudCBpbiB0aGF0IEFwcGl1bSAnICtcbiAgICAgICAgICAnZG9lcyBub3QgcmVjb2duaXplIGFzIHZhbGlkIGZvciB0aGUgc2VsZWN0ZWQgZGV2aWNlJyxcbiAgICBuYXJnczogMCxcbiAgfV0sXG5cbiAgW1snLS10bXAnXSwge1xuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBkZXN0OiAndG1wRGlyJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0Fic29sdXRlIHBhdGggdG8gZGlyZWN0b3J5IEFwcGl1bSBjYW4gdXNlIHRvIG1hbmFnZSB0ZW1wb3JhcnkgJyArXG4gICAgICAgICAgJ2ZpbGVzLCBsaWtlIGJ1aWx0LWluIGlPUyBhcHBzIGl0IG5lZWRzIHRvIG1vdmUgYXJvdW5kLiBPbiAqbml4L01hYyAnICtcbiAgICAgICAgICAnZGVmYXVsdHMgdG8gL3RtcCwgb24gV2luZG93cyBkZWZhdWx0cyB0byBDOlxcXFxXaW5kb3dzXFxcXFRlbXAnLFxuICB9XSxcblxuICBbWyctLXRyYWNlLWRpciddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGRlc3Q6ICd0cmFjZURpcicsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdBYnNvbHV0ZSBwYXRoIHRvIGRpcmVjdG9yeSBBcHBpdW0gdXNlIHRvIHNhdmUgaW9zIGluc3RydW1lbnRzICcgK1xuICAgICAgICAgICd0cmFjZXMsIGRlZmF1bHRzIHRvIDx0bXAgZGlyPi9hcHBpdW0taW5zdHJ1bWVudHMnLFxuICB9XSxcblxuICBbWyctLWRlYnVnLWxvZy1zcGFjaW5nJ10sIHtcbiAgICBkZXN0OiAnZGVidWdMb2dTcGFjaW5nJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICdBZGQgZXhhZ2dlcmF0ZWQgc3BhY2luZyBpbiBsb2dzIHRvIGhlbHAgd2l0aCB2aXN1YWwgaW5zcGVjdGlvbicsXG4gIH1dLFxuXG4gIFtbJy0tc3VwcHJlc3MtYWRiLWtpbGwtc2VydmVyJ10sIHtcbiAgICBkZXN0OiAnc3VwcHJlc3NLaWxsU2VydmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGhlbHA6ICcoQW5kcm9pZC1vbmx5KSBJZiBzZXQsIHByZXZlbnRzIEFwcGl1bSBmcm9tIGtpbGxpbmcgdGhlIGFkYiBzZXJ2ZXIgaW5zdGFuY2UnLFxuICAgIG5hcmdzOiAwLFxuICB9XSxcblxuICBbWyctLWxvbmctc3RhY2t0cmFjZSddLCB7XG4gICAgZGVzdDogJ2xvbmdTdGFja3RyYWNlJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgIGhlbHA6ICdBZGQgbG9uZyBzdGFjayB0cmFjZXMgdG8gbG9nIGVudHJpZXMuIFJlY29tbWVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4nLFxuICB9XSxcblxuICBbWyctLXdlYmtpdC1kZWJ1Zy1wcm94eS1wb3J0J10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IDI3NzUzLFxuICAgIGRlc3Q6ICd3ZWJraXREZWJ1Z1Byb3h5UG9ydCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHR5cGU6ICdpbnQnLFxuICAgIGV4YW1wbGU6ICcyNzc1MycsXG4gICAgaGVscDogJyhJT1Mtb25seSkgTG9jYWwgcG9ydCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggaW9zLXdlYmtpdC1kZWJ1Zy1wcm94eSdcbiAgfV0sXG5cbiAgW1snLS13ZWJkcml2ZXJhZ2VudC1wb3J0J10sIHtcbiAgICBkZWZhdWx0VmFsdWU6IDgxMDAsXG4gICAgZGVzdDogJ3dkYUxvY2FsUG9ydCcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHR5cGU6ICdpbnQnLFxuICAgIGV4YW1wbGU6ICc4MTAwJyxcbiAgICBoZWxwOiAnKElPUy1vbmx5LCBYQ1VJVGVzdC1vbmx5KSBMb2NhbCBwb3J0IHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBXZWJEcml2ZXJBZ2VudCdcbiAgfV0sXG5cbiAgW1snLWRjJywgJy0tZGVmYXVsdC1jYXBhYmlsaXRpZXMnXSwge1xuICAgIGRlc3Q6ICdkZWZhdWx0Q2FwYWJpbGl0aWVzJyxcbiAgICBkZWZhdWx0VmFsdWU6IHt9LFxuICAgIHR5cGU6IHBhcnNlRGVmYXVsdENhcHMsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGV4YW1wbGU6ICdbIFxcJ3tcImFwcFwiOiBcIm15YXBwLmFwcFwiLCBcImRldmljZU5hbWVcIjogXCJpUGhvbmUgU2ltdWxhdG9yXCJ9XFwnICcgK1xuICAgICAgICAgICAgICd8IC9wYXRoL3RvL2NhcHMuanNvbiBdJyxcbiAgICBoZWxwOiAnU2V0IHRoZSBkZWZhdWx0IGRlc2lyZWQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIHNldCBvbiBlYWNoICcgK1xuICAgICAgICAgICdzZXNzaW9uIHVubGVzcyBvdmVycmlkZGVuIGJ5IHJlY2VpdmVkIGNhcGFiaWxpdGllcy4nXG4gIH1dLFxuXG4gIFtbJy0tcmVsYXhlZC1zZWN1cml0eSddLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBkZXN0OiAncmVsYXhlZFNlY3VyaXR5RW5hYmxlZCcsXG4gICAgYWN0aW9uOiAnc3RvcmVUcnVlJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogJ0Rpc2FibGUgYWRkaXRpb25hbCBzZWN1cml0eSBjaGVja3MsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBzb21lIGFkdmFuY2VkIGZlYXR1cmVzLCBwcm92aWRlZCAnICtcbiAgICAgICAgICAnYnkgZHJpdmVycyBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbmx5IGVuYWJsZSBpdCBpZiBhbGwgdGhlICcgK1xuICAgICAgICAgICdjbGllbnRzIGFyZSBpbiB0aGUgdHJ1c3RlZCBuZXR3b3JrIGFuZCBpdFxcJ3Mgbm90IHRoZSBjYXNlIGlmIGEgY2xpZW50IGNvdWxkIHBvdGVudGlhbGx5ICcgK1xuICAgICAgICAgICdicmVhayBvdXQgb2YgdGhlIHNlc3Npb24gc2FuZGJveC4gU3BlY2lmaWMgZmVhdHVyZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgJyArXG4gICAgICAgICAgJ3VzaW5nIHRoZSAtLWRlbnktaW5zZWN1cmUgZmxhZycsXG4gICAgbmFyZ3M6IDBcbiAgfV0sXG5cbiAgW1snLS1hbGxvdy1pbnNlY3VyZSddLCB7XG4gICAgZGVzdDogJ2FsbG93SW5zZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogW10sXG4gICAgdHlwZTogcGFyc2VTZWN1cml0eUZlYXR1cmVzLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBleGFtcGxlOiAnZXhlY3V0ZV9kcml2ZXJfc2NyaXB0LGFkYl9zaGVsbCcsXG4gICAgaGVscDogJ1NldCB3aGljaCBpbnNlY3VyZSBmZWF0dXJlcyBhcmUgYWxsb3dlZCB0byBydW4gaW4gdGhpcyBzZXJ2ZXJcXCdzIHNlc3Npb25zLiAnICtcbiAgICAgICAgICAnRmVhdHVyZXMgYXJlIGRlZmluZWQgb24gYSBkcml2ZXIgbGV2ZWw7IHNlZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuICcgK1xuICAgICAgICAgICdUaGlzIHNob3VsZCBiZSBlaXRoZXIgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlIG5hbWVzLCBvciBhIHBhdGggdG8gJyArXG4gICAgICAgICAgJ2EgZmlsZSB3aGVyZSBlYWNoIGZlYXR1cmUgbmFtZSBpcyBvbiBhIGxpbmUuIE5vdGUgdGhhdCBmZWF0dXJlcyBkZWZpbmVkIHZpYSAnICtcbiAgICAgICAgICAnLS1kZW55LWluc2VjdXJlIHdpbGwgYmUgZGlzYWJsZWQsIGV2ZW4gaWYgYWxzbyBsaXN0ZWQgaGVyZS4nLFxuICB9XSxcblxuICBbWyctLWRlbnktaW5zZWN1cmUnXSwge1xuICAgIGRlc3Q6ICdkZW55SW5zZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogW10sXG4gICAgdHlwZTogcGFyc2VTZWN1cml0eUZlYXR1cmVzLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBleGFtcGxlOiAnZXhlY3V0ZV9kcml2ZXJfc2NyaXB0LGFkYl9zaGVsbCcsXG4gICAgaGVscDogJ1NldCB3aGljaCBpbnNlY3VyZSBmZWF0dXJlcyBhcmUgbm90IGFsbG93ZWQgdG8gcnVuIGluIHRoaXMgc2VydmVyXFwncyBzZXNzaW9ucy4gJyArXG4gICAgICAgICAgJ0ZlYXR1cmVzIGFyZSBkZWZpbmVkIG9uIGEgZHJpdmVyIGxldmVsOyBzZWUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLiAnICtcbiAgICAgICAgICAnVGhpcyBzaG91bGQgYmUgZWl0aGVyIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcywgb3IgYSBwYXRoIHRvICcgK1xuICAgICAgICAgICdhIGZpbGUgd2hlcmUgZWFjaCBmZWF0dXJlIG5hbWUgaXMgb24gYSBsaW5lLiBGZWF0dXJlcyBsaXN0ZWQgaGVyZSB3aWxsIG5vdCBiZSAnICtcbiAgICAgICAgICAnZW5hYmxlZCBldmVuIGlmIGFsc28gbGlzdGVkIGluIC0tYWxsb3ctaW5zZWN1cmUsIGFuZCBldmVuIGlmIC0tcmVsYXhlZC1zZWN1cml0eSAnICtcbiAgICAgICAgICAnaXMgdHVybmVkIG9uLicsXG4gIH1dLFxuXTtcblxuLy8gdGhpcyBzZXQgb2YgYXJncyB3b3JrcyBmb3IgYm90aCBkcml2ZXJzIGFuZCBwbHVnaW5zICgnZXh0ZW5zaW9ucycpXG5jb25zdCBnbG9iYWxFeHRlbnNpb25BcmdzID0gW1xuICBbWyctLWpzb24nXSwge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICBuYXJnczogMCxcbiAgICBkZXN0OiAnanNvbidcbiAgfV1cbl07XG5cbmNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7W0RSSVZFUl9UWVBFXToge30sIFtQTFVHSU5fVFlQRV06IHt9fTtcblxuZnVuY3Rpb24gbWFrZUxpc3RBcmdzICh0eXBlKSB7XG4gIHJldHVybiBbXG4gICAgLi4uZ2xvYmFsRXh0ZW5zaW9uQXJncyxcbiAgICBbWyctLWluc3RhbGxlZCddLCB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgYWN0aW9uOiAnc3RvcmVUcnVlJyxcbiAgICAgIGhlbHA6IGBMaXN0IG9ubHkgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgIG5hcmdzOiAwLFxuICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnXG4gICAgfV0sXG4gICAgW1snLS11cGRhdGVzJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICBhY3Rpb246ICdzdG9yZVRydWUnLFxuICAgICAgaGVscDogJ1Nob3cgaW5mb3JtYXRpb24gYWJvdXQgbmV3ZXIgdmVyc2lvbnMnLFxuICAgICAgbmFyZ3M6IDAsXG4gICAgICBkZXN0OiAnc2hvd1VwZGF0ZXMnXG4gICAgfV1cbiAgXTtcbn1cblxuXG5mdW5jdGlvbiBtYWtlSW5zdGFsbEFyZ3MgKHR5cGUpIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgZXhhbXBsZTogdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgICAgaGVscDogYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbGAsXG4gICAgfV0sXG4gICAgW1snLS1zb3VyY2UnXSwge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgICAgdHlwZTogcGFyc2VJbnN0YWxsVHlwZXMsXG4gICAgICBoZWxwOiBgV2hlcmUgdG8gbG9vayBmb3IgdGhlICR7dHlwZX0gaWYgaXQgaXMgbm90IG9uZSBvZiBBcHBpdW0ncyB2ZXJpZmllZCBgICtcbiAgICAgICAgICAgIGAke3R5cGV9cy4gUG9zc2libGUgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KElOU1RBTExfVFlQRVMpfWAsXG4gICAgICBkZXN0OiAnaW5zdGFsbFR5cGUnXG4gICAgfV0sXG4gICAgW1snLS1wYWNrYWdlJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgaGVscDogYElmIGluc3RhbGxpbmcgZnJvbSBHaXQgb3IgR2l0SHViLCB0aGUgcGFja2FnZSBuYW1lLCBhcyBkZWZpbmVkIGluIHRoZSBwbHVnaW4ncyBgICtcbiAgICAgICAgICAgIGBwYWNrYWdlLmpzb24gZmlsZSBpbiB0aGUgXCJuYW1lXCIgZmllbGQsIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIGFuZCBgICtcbiAgICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgZGVzdDogJ3BhY2thZ2VOYW1lJyxcbiAgICB9XSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gbWFrZVVuaW5zdGFsbEFyZ3MgKHR5cGUpIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgZXhhbXBsZTogdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgICAgaGVscDogJ05hbWUgb2YgdGhlIGRyaXZlciB0byB1bmluc3RhbGwnLFxuICAgIH1dLFxuICBdO1xufVxuXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyAodHlwZSkge1xuICByZXR1cm4gW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1t0eXBlXSwge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBleGFtcGxlOiB0eXBlID09PSBEUklWRVJfVFlQRSA/IERSSVZFUl9FWEFNUExFIDogUExVR0lOX0VYQU1QTEUsXG4gICAgICBoZWxwOiBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byB1cGRhdGUsIG9yIHRoZSB3b3JkIFwiaW5zdGFsbGVkXCIgdG8gdXBkYXRlIGFsbCBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICBgJHt0eXBlfXMuIFRvIHNlZSBhdmFpbGFibGUgdXBkYXRlcywgcnVuIFwiYXBwaXVtICR7dHlwZX0gbGlzdCAtLWluc3RhbGxlZCAtLXVwZGF0ZXNcImAsXG4gICAgfV0sXG4gICAgW1snLS11bnNhZmUnXSwge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlVHJ1ZScsXG4gICAgICBuYXJnczogMCxcbiAgICAgIGhlbHA6IGBJbmNsdWRlIHVwZGF0ZXMgdGhhdCBtaWdodCBoYXZlIGEgbmV3IG1ham9yIHJldmlzaW9uLCBhbmQgcG90ZW50aWFsbHkgaW5jbHVkZSBgICtcbiAgICAgICAgICAgIGBicmVha2luZyBjaGFuZ2VzYCxcbiAgICB9XSxcbiAgXTtcbn1cblxuZm9yIChjb25zdCB0eXBlIG9mIFtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEVdKSB7XG4gIGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCA9IG1ha2VMaXN0QXJncyh0eXBlKTtcbiAgZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsID0gbWFrZUluc3RhbGxBcmdzKHR5cGUpO1xuICBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCA9IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpO1xuICBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSA9IG1ha2VVcGRhdGVBcmdzKHR5cGUpO1xufVxuXG5leHBvcnQge1xuICBzaGFyZWRBcmdzLFxuICBzZXJ2ZXJBcmdzLFxuICBleHRlbnNpb25BcmdzLFxuICBVU0VfQUxMX1BMVUdJTlMsXG59O1xuIl0sImZpbGUiOiJsaWIvY2xpL2FyZ3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
166
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvYXJncy5qcyJdLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiVVNFX0FMTF9QTFVHSU5TIiwiRVhURU5TSU9OX1RZUEVTIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsImRyaXZlckNvbmZpZyIsIkRyaXZlckNvbmZpZyIsImdldEluc3RhbmNlIiwiQVBQSVVNX0hPTUUiLCJwbHVnaW5Db25maWciLCJQbHVnaW5Db25maWciLCJnbG9iYWxFeHRlbnNpb25BcmdzIiwiTWFwIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiYWN0aW9uIiwiaGVscCIsImRlc3QiLCJnZXRFeHRlbnNpb25BcmdzIiwiXyIsIm9uY2UiLCJleHRlbnNpb25BcmdzIiwidHlwZSIsImxpc3QiLCJtYWtlTGlzdEFyZ3MiLCJpbnN0YWxsIiwibWFrZUluc3RhbGxBcmdzIiwidW5pbnN0YWxsIiwibWFrZVVuaW5zdGFsbEFyZ3MiLCJ1cGRhdGUiLCJtYWtlVXBkYXRlQXJncyIsInJ1biIsIm1ha2VSdW5BcmdzIiwiY2hvaWNlcyIsIklOU1RBTExfVFlQRVMiLCJqb2luIiwiZ2V0U2VydmVyQXJncyIsIm92ZXJyaWRlcyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJzZXJ2ZXJBcmdzRGlzYWxsb3dlZEluQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLFVBQXZCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLGVBQXZCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCOztBQUdBLE1BQU1DLGVBQWUsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FBQ0MsNEJBQUQsRUFBY0MsNEJBQWQsQ0FBUixDQUF4Qjs7QUFFQSxNQUFNQyxZQUFZLEdBQUdDLHNCQUFhQyxXQUFiLENBQXlCQyw0QkFBekIsQ0FBckI7Ozs7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RTtBQUxSLENBRkYsQ0FYMkMsRUFxQjNDLENBQ0UsQ0FBQyxVQUFELENBREYsRUFFRTtBQUNFQyxFQUFBQSxJQUFJLEVBQUUsWUFEUjtBQUVFSyxFQUFBQSxJQUFJLEVBQUUsUUFGUjtBQUdFVCxFQUFBQSxRQUFRLEVBQUUsS0FIWjtBQUlFRyxFQUFBQSxJQUFJLEVBQUU7QUFKUixDQUZGLENBckIyQyxDQUFSLENBQXJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IERFRkFVTFRfQkFTRV9QQVRIIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERyaXZlckNvbmZpZyBmcm9tICcuLi9kcml2ZXItY29uZmlnJztcbmltcG9ydCB7IEFQUElVTV9IT01FLCBEUklWRVJfVFlQRSwgSU5TVEFMTF9UWVBFUywgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCBQbHVnaW5Db25maWcgZnJvbSAnLi4vcGx1Z2luLWNvbmZpZyc7XG5pbXBvcnQgeyB0b1BhcnNlckFyZ3MgfSBmcm9tICcuLi9zY2hlbWEvY2xpLWFyZ3MnO1xuXG5jb25zdCBEUklWRVJfRVhBTVBMRSA9ICd4Y3VpdGVzdCc7XG5jb25zdCBQTFVHSU5fRVhBTVBMRSA9ICdmaW5kX2J5X2ltYWdlJztcbmNvbnN0IFVTRV9BTExfUExVR0lOUyA9ICdhbGwnO1xuXG4vKiogQHR5cGUge1NldDxFeHRlbnNpb25UeXBlPn0gKi9cbmNvbnN0IEVYVEVOU0lPTl9UWVBFUyA9IG5ldyBTZXQoW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pO1xuXG5jb25zdCBkcml2ZXJDb25maWcgPSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UoQVBQSVVNX0hPTUUpO1xuY29uc3QgcGx1Z2luQ29uZmlnID0gUGx1Z2luQ29uZmlnLmdldEluc3RhbmNlKEFQUElVTV9IT01FKTtcblxuLy8gdGhpcyBzZXQgb2YgYXJncyB3b3JrcyBmb3IgYm90aCBkcml2ZXJzIGFuZCBwbHVnaW5zICgnZXh0ZW5zaW9ucycpXG4vKiogQHR5cGUge0FyZ3VtZW50RGVmaW5pdGlvbnN9ICovXG5jb25zdCBnbG9iYWxFeHRlbnNpb25BcmdzID0gbmV3IE1hcChbXG4gIFtbJy0tanNvbiddLCB7XG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgIGhlbHA6ICdVc2UgSlNPTiBmb3Igb3V0cHV0IGZvcm1hdCcsXG4gICAgZGVzdDogJ2pzb24nXG4gIH1dXG5dKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBSZWNvcmQgb2YgZXh0ZW5zaW9uIHR5cGVzIHRvIGEgUmVjb3JkIG9mIHN1YmNvbW1hbmRzIHRvIHRoZWlyIGFyZ3VtZW50IGRlZmluaXRpb25zXG4gKi9cbmNvbnN0IGdldEV4dGVuc2lvbkFyZ3MgPSBfLm9uY2UoZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQXJncyAoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7fTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIEVYVEVOU0lPTl9UWVBFUykge1xuICAgIGV4dGVuc2lvbkFyZ3NbdHlwZV0gPSB7XG4gICAgICBsaXN0OiBtYWtlTGlzdEFyZ3ModHlwZSksXG4gICAgICBpbnN0YWxsOiBtYWtlSW5zdGFsbEFyZ3ModHlwZSksXG4gICAgICB1bmluc3RhbGw6IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgdXBkYXRlOiBtYWtlVXBkYXRlQXJncyh0eXBlKSxcbiAgICAgIHJ1bjogbWFrZVJ1bkFyZ3ModHlwZSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8RXh0ZW5zaW9uVHlwZSwgUmVjb3JkPHN0cmluZyxBcmd1bWVudERlZmluaXRpb25zW10+Pn0gKi8gKGV4dGVuc2lvbkFyZ3MpO1xufSk7XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgbGlzdGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VMaXN0QXJncyAodHlwZSkge1xuICByZXR1cm4gbmV3IE1hcChbXG4gICAgLi4uZ2xvYmFsRXh0ZW5zaW9uQXJncyxcbiAgICBbWyctLWluc3RhbGxlZCddLCB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogYExpc3Qgb25seSBpbnN0YWxsZWQgJHt0eXBlfXNgLFxuICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnXG4gICAgfV0sXG4gICAgW1snLS11cGRhdGVzJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICBkZXN0OiAnc2hvd1VwZGF0ZXMnXG4gICAgfV1cbiAgXSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgaW5zdGFsbGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZVxuICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSB0eXBlXG4gKiBAcmV0dXJucyB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuZnVuY3Rpb24gbWFrZUluc3RhbGxBcmdzICh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgK1xuICAgICAgICAgICAgdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgIH1dLFxuICAgIFtbJy0tc291cmNlJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBjaG9pY2VzOiBJTlNUQUxMX1RZUEVTLFxuICAgICAgaGVscDogYFdoZXJlIHRvIGxvb2sgZm9yIHRoZSAke3R5cGV9IGlmIGl0IGlzIG5vdCBvbmUgb2YgQXBwaXVtJ3MgdmVyaWZpZWQgYCArXG4gICAgICAgICAgICBgJHt0eXBlfXMuIFBvc3NpYmxlIHZhbHVlczogJHtJTlNUQUxMX1RZUEVTLmpvaW4oJywgJyl9YCxcbiAgICAgIGRlc3Q6ICdpbnN0YWxsVHlwZSdcbiAgICB9XSxcbiAgICBbWyctLXBhY2thZ2UnXSwge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYElmIGluc3RhbGxpbmcgZnJvbSBHaXQgb3IgR2l0SHViLCB0aGUgcGFja2FnZSBuYW1lLCBhcyBkZWZpbmVkIGluIHRoZSBwbHVnaW4ncyBgICtcbiAgICAgICAgICAgIGBwYWNrYWdlLmpzb24gZmlsZSBpbiB0aGUgXCJuYW1lXCIgZmllbGQsIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIGFuZCBgICtcbiAgICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgZGVzdDogJ3BhY2thZ2VOYW1lJyxcbiAgICB9XSxcbiAgXSk7XG59XG5cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1bmluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVbmluc3RhbGxBcmdzICh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogJ05hbWUgb2YgdGhlIGRyaXZlciB0byB1bmluc3RhbGwsIGZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09IERSSVZFUl9UWVBFID8gRFJJVkVSX0VYQU1QTEUgOiBQTFVHSU5fRVhBTVBMRVxuICAgIH1dLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1cGRhdGVgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVcGRhdGVBcmdzICh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtbdHlwZV0sIHtcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gdXBkYXRlLCBvciB0aGUgd29yZCBcImluc3RhbGxlZFwiIHRvIHVwZGF0ZSBhbGwgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBUbyBzZWUgYXZhaWxhYmxlIHVwZGF0ZXMsIHJ1biBcImFwcGl1bSAke3R5cGV9IGxpc3QgLS1pbnN0YWxsZWQgLS11cGRhdGVzXCIuIGAgK1xuICAgICAgICAgICAgJ0ZvciBleGFtcGxlOiAnICsgdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgIH1dLFxuICAgIFtbJy0tdW5zYWZlJ10sIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICBoZWxwOiBgSW5jbHVkZSB1cGRhdGVzIHRoYXQgbWlnaHQgaGF2ZSBhIG5ldyBtYWpvciByZXZpc2lvbiwgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgYCArXG4gICAgICAgICAgICBgYnJlYWtpbmcgY2hhbmdlc2AsXG4gICAgfV0sXG4gIF0pO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBvcHRzIGZvciB0aGUgYHJ1bmAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZVxuICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSB0eXBlXG4gKiBAcmV0dXJucyB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuZnVuY3Rpb24gbWFrZVJ1bkFyZ3MgKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1t0eXBlXSwge1xuICAgICAgdHlwZTogJ3N0cicsXG4gICAgICBoZWxwOiBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byBydW4gYSBzY3JpcHQgZnJvbSwgZm9yIGV4YW1wbGU6IGAgK1xuICAgICAgICAgICAgdHlwZSA9PT0gRFJJVkVSX1RZUEUgPyBEUklWRVJfRVhBTVBMRSA6IFBMVUdJTl9FWEFNUExFLFxuICAgIH1dLFxuICAgIFtbJ3NjcmlwdE5hbWUnXSwge1xuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgaGVscDogYE5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW4gZnJvbSB0aGUgJHt0eXBlfS4gVGhlIHNjcmlwdCBuYW1lIG11c3QgYmUgY2FjaGVkIGAgK1xuICAgICAgICAgICAgYGluc2lkZSB0aGUgXCJzY3JpcHRzXCIgZmllbGQgdW5kZXIgXCJhcHBpdW1cIiBpbnNpZGUgdGhlICR7dHlwZX0ncyBcInBhY2thZ2UuanNvblwiIGZpbGVgXG4gICAgfV0sXG4gIF0pO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIG9wdGlvbnMgZm9yIHRoZSBgc2VydmVyYCBjb21tYW5kIGZyb20gdGhlIHNjaGVtYSwgYW5kIGFkZHMgdGhlIGFyZ3VtZW50c1xuICogd2hpY2ggYXJlIGRpc2FsbG93ZWQgaW4gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlckFyZ3MgKCkge1xuICByZXR1cm4gbmV3IE1hcChbXG4gICAgLi4udG9QYXJzZXJBcmdzKHtcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBiYXNlUGF0aDoge1xuICAgICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfQkFTRV9QQVRIXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSksXG4gICAgLi4uc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZyxcbiAgXSk7XG59XG5cbi8qKlxuICogVGhlc2UgZG9uJ3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBhIGNvbmZpZyBmaWxlIGZvciBvYnZpb3VzIHJlYXNvbnMuXG4gKiBAdHlwZSB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuY29uc3Qgc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLXNoZWxsJ10sXG4gICAge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGhlbHA6ICdFbnRlciBSRVBMIG1vZGUnLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICBkZXN0OiAnc2hlbGwnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tc2hvdy1jb25maWcnXSxcbiAgICB7XG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGRlc3Q6ICdzaG93Q29uZmlnJyxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ1Nob3cgaW5mbyBhYm91dCB0aGUgYXBwaXVtIHNlcnZlciBjb25maWd1cmF0aW9uIGFuZCBleGl0JyxcbiAgICB9LFxuICBdLFxuICBbXG4gICAgWyctLWNvbmZpZyddLFxuICAgIHtcbiAgICAgIGRlc3Q6ICdjb25maWdGaWxlJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ0V4cGxpY2l0IHBhdGggdG8gQXBwaXVtIGNvbmZpZ3VyYXRpb24gZmlsZScsXG4gICAgfSxcbiAgXSxcbl0pO1xuXG5leHBvcnQge1xuICBnZXRTZXJ2ZXJBcmdzLFxuICBnZXRFeHRlbnNpb25BcmdzLFxuICBVU0VfQUxMX1BMVUdJTlMsXG4gIGRyaXZlckNvbmZpZyxcbiAgcGx1Z2luQ29uZmlnLFxuICBBUFBJVU1fSE9NRVxufTtcblxuLyoqXG4gKiBBbGlhc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEEgdHVwbGUgb2YgYXJndW1lbnQgYWxpYXNlcyBhbmQgYXJndW1lbnQgb3B0aW9uc1xuICogQHR5cGVkZWYge01hcDxzdHJpbmdbXSxpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zPn0gQXJndW1lbnREZWZpbml0aW9uc1xuICovXG4iXSwiZmlsZSI6ImxpYi9jbGkvYXJncy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -62,6 +62,16 @@ class DriverCommand extends _extensionCommand.default {
62
62
  });
63
63
  }
64
64
 
65
+ async run({
66
+ driver,
67
+ scriptName
68
+ }) {
69
+ return await super.run({
70
+ ext: driver,
71
+ scriptName
72
+ });
73
+ }
74
+
65
75
  getPostInstallText({
66
76
  extName,
67
77
  extData
@@ -82,4 +92,4 @@ class DriverCommand extends _extensionCommand.default {
82
92
  exports.default = DriverCommand;require('source-map-support').install();
83
93
 
84
94
 
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX0RSSVZFUl9GSUVMRFMiLCJEcml2ZXJDb21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJEUklWRVJfVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX0RSSVZFUlMiLCJpbnN0YWxsIiwiZHJpdmVyIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsImdldFBvc3RJbnN0YWxsVGV4dCIsImV4dE5hbWUiLCJleHREYXRhIiwidmVyc2lvbiIsImdyZWVuIiwiYXV0b21hdGlvbk5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicGxhdGZvcm1OYW1lcyIsInZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzIiwiYXBwaXVtUGtnRGF0YSIsIm1pc3NpbmdGaWVsZHMiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FBQyxZQUFELEVBQWUsZ0JBQWYsRUFBaUMsZUFBakMsRUFBa0QsV0FBbEQsQ0FBMUI7O0FBRWUsTUFBTUMsYUFBTixTQUE0QkMseUJBQTVCLENBQTZDO0FBRTFEQyxFQUFBQSxXQUFXLENBQUU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQTtBQUFULEdBQUYsRUFBa0I7QUFDM0IsVUFBTTtBQUFDRCxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBLElBQVQ7QUFBZUMsTUFBQUEsSUFBSSxFQUFFQztBQUFyQixLQUFOO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsc0JBQXZCO0FBQ0Q7O0FBRUQsUUFBTUMsT0FBTixDQUFlO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUEsV0FBVDtBQUFzQkMsSUFBQUE7QUFBdEIsR0FBZixFQUFtRDtBQUNqRCxXQUFPLE1BQU0sTUFBTUgsT0FBTixDQUFjO0FBQUNJLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjQyxNQUFBQSxXQUFkO0FBQTJCQyxNQUFBQTtBQUEzQixLQUFkLENBQWI7QUFDRDs7QUFFRCxRQUFNRSxTQUFOLENBQWlCO0FBQUNKLElBQUFBO0FBQUQsR0FBakIsRUFBMkI7QUFDekIsV0FBTyxNQUFNLE1BQU1JLFNBQU4sQ0FBZ0I7QUFBQ0QsTUFBQUEsR0FBRyxFQUFFSDtBQUFOLEtBQWhCLENBQWI7QUFDRDs7QUFFRCxRQUFNSyxNQUFOLENBQWM7QUFBQ0wsSUFBQUEsTUFBRDtBQUFTTSxJQUFBQTtBQUFULEdBQWQsRUFBZ0M7QUFDOUIsV0FBTyxNQUFNLE1BQU1ELE1BQU4sQ0FBYTtBQUFDRixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY00sTUFBQUE7QUFBZCxLQUFiLENBQWI7QUFDRDs7QUFFREMsRUFBQUEsa0JBQWtCLENBQUU7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQTtBQUFWLEdBQUYsRUFBc0I7QUFDdEMsV0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSwyQkFBckMsQ0FBZ0VDLEtBQWhFLEdBQ0MscUJBQW9CRixPQUFPLENBQUNHLGNBQVIsQ0FBdUJELEtBQU0sSUFEbEQsR0FFQyxvQkFBbUJFLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxPQUFPLENBQUNNLGFBQXZCLEVBQXNDSixLQUFNLEVBRnZFO0FBR0Q7O0FBRURLLEVBQUFBLHVCQUF1QixDQUFFQyxhQUFGLEVBQWlCO0FBQ3RDLFVBQU1DLGFBQWEsR0FBRzdCLGlCQUFpQixDQUFDOEIsTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQzdDSixhQUFhLENBQUNJLEtBQUQsQ0FBYixHQUF1QkQsR0FBdkIsR0FBNkIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEVCxFQUVuQixFQUZtQixDQUF0Qjs7QUFJQSxRQUFJLENBQUNDLGdCQUFFQyxPQUFGLENBQVVMLGFBQVYsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlNLEtBQUosQ0FBVyxpRUFBRCxHQUNDLGdDQUErQlgsSUFBSSxDQUFDQyxTQUFMLENBQWVJLGFBQWYsQ0FBOEIsRUFEeEUsQ0FBTjtBQUVEO0FBRUY7O0FBbkN5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgRXh0ZW5zaW9uQ29tbWFuZCBmcm9tICcuL2V4dGVuc2lvbi1jb21tYW5kJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBLTk9XTl9EUklWRVJTIH0gZnJvbSAnLi4vZHJpdmVycyc7XG5cbmNvbnN0IFJFUV9EUklWRVJfRklFTERTID0gWydkcml2ZXJOYW1lJywgJ2F1dG9tYXRpb25OYW1lJywgJ3BsYXRmb3JtTmFtZXMnLCAnbWFpbkNsYXNzJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlckNvbW1hbmQgZXh0ZW5kcyBFeHRlbnNpb25Db21tYW5kIHtcblxuICBjb25zdHJ1Y3RvciAoe2NvbmZpZywganNvbn0pIHtcbiAgICBzdXBlcih7Y29uZmlnLCBqc29uLCB0eXBlOiBEUklWRVJfVFlQRX0pO1xuICAgIHRoaXMua25vd25FeHRlbnNpb25zID0gS05PV05fRFJJVkVSUztcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwgKHtkcml2ZXIsIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuaW5zdGFsbCh7ZXh0OiBkcml2ZXIsIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsICh7ZHJpdmVyfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci51bmluc3RhbGwoe2V4dDogZHJpdmVyfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUgKHtkcml2ZXIsIHVuc2FmZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudXBkYXRlKHtleHQ6IGRyaXZlciwgdW5zYWZlfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgRHJpdmVyICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRcXG5gLmdyZWVuICtcbiAgICAgICAgICAgYC0gYXV0b21hdGlvbk5hbWU6ICR7ZXh0RGF0YS5hdXRvbWF0aW9uTmFtZS5ncmVlbn1cXG5gICtcbiAgICAgICAgICAgYC0gcGxhdGZvcm1OYW1lczogJHtKU09OLnN0cmluZ2lmeShleHREYXRhLnBsYXRmb3JtTmFtZXMpLmdyZWVufWA7XG4gIH1cblxuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyAoYXBwaXVtUGtnRGF0YSkge1xuICAgIGNvbnN0IG1pc3NpbmdGaWVsZHMgPSBSRVFfRFJJVkVSX0ZJRUxEUy5yZWR1Y2UoKGFjYywgZmllbGQpID0+IChcbiAgICAgIGFwcGl1bVBrZ0RhdGFbZmllbGRdID8gYWNjIDogWy4uLmFjYywgZmllbGRdXG4gICAgKSwgW10pO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ0ZpZWxkcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFsbGVkIGRyaXZlciBkaWQgbm90IGV4cG9zZSBjb3JyZWN0IGZpZWxkcyBmb3IgY29tcGFiaWxpdHkgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHdpdGggQXBwaXVtLiBNaXNzaW5nIGZpZWxkczogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nRmllbGRzKX1gKTtcbiAgICB9XG5cbiAgfVxuXG59XG4iXSwiZmlsZSI6ImxpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
95
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX0RSSVZFUl9GSUVMRFMiLCJEcml2ZXJDb21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJEUklWRVJfVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX0RSSVZFUlMiLCJpbnN0YWxsIiwiZHJpdmVyIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsInJ1biIsInNjcmlwdE5hbWUiLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsImF1dG9tYXRpb25OYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsYXRmb3JtTmFtZXMiLCJ2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyIsImFwcGl1bVBrZ0RhdGEiLCJtaXNzaW5nRmllbGRzIiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJfIiwiaXNFbXB0eSIsIkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLENBQUMsWUFBRCxFQUFlLGdCQUFmLEVBQWlDLGVBQWpDLEVBQWtELFdBQWxELENBQTFCOztBQUVlLE1BQU1DLGFBQU4sU0FBNEJDLHlCQUE1QixDQUE2QztBQUUxREMsRUFBQUEsV0FBVyxDQUFFO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUE7QUFBVCxHQUFGLEVBQWtCO0FBQzNCLFVBQU07QUFBQ0QsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQSxJQUFUO0FBQWVDLE1BQUFBLElBQUksRUFBRUM7QUFBckIsS0FBTjtBQUNBLFNBQUtDLGVBQUwsR0FBdUJDLHNCQUF2QjtBQUNEOztBQUVZLFFBQVBDLE9BQU8sQ0FBRTtBQUFDQyxJQUFBQSxNQUFEO0FBQVNDLElBQUFBLFdBQVQ7QUFBc0JDLElBQUFBO0FBQXRCLEdBQUYsRUFBc0M7QUFDakQsV0FBTyxNQUFNLE1BQU1ILE9BQU4sQ0FBYztBQUFDSSxNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY0MsTUFBQUEsV0FBZDtBQUEyQkMsTUFBQUE7QUFBM0IsS0FBZCxDQUFiO0FBQ0Q7O0FBRWMsUUFBVEUsU0FBUyxDQUFFO0FBQUNKLElBQUFBO0FBQUQsR0FBRixFQUFZO0FBQ3pCLFdBQU8sTUFBTSxNQUFNSSxTQUFOLENBQWdCO0FBQUNELE1BQUFBLEdBQUcsRUFBRUg7QUFBTixLQUFoQixDQUFiO0FBQ0Q7O0FBRVcsUUFBTkssTUFBTSxDQUFFO0FBQUNMLElBQUFBLE1BQUQ7QUFBU00sSUFBQUE7QUFBVCxHQUFGLEVBQW9CO0FBQzlCLFdBQU8sTUFBTSxNQUFNRCxNQUFOLENBQWE7QUFBQ0YsTUFBQUEsR0FBRyxFQUFFSCxNQUFOO0FBQWNNLE1BQUFBO0FBQWQsS0FBYixDQUFiO0FBQ0Q7O0FBRVEsUUFBSEMsR0FBRyxDQUFFO0FBQUNQLElBQUFBLE1BQUQ7QUFBU1EsSUFBQUE7QUFBVCxHQUFGLEVBQXdCO0FBQy9CLFdBQU8sTUFBTSxNQUFNRCxHQUFOLENBQVU7QUFBQ0osTUFBQUEsR0FBRyxFQUFFSCxNQUFOO0FBQWNRLE1BQUFBO0FBQWQsS0FBVixDQUFiO0FBQ0Q7O0FBRURDLEVBQUFBLGtCQUFrQixDQUFFO0FBQUNDLElBQUFBLE9BQUQ7QUFBVUMsSUFBQUE7QUFBVixHQUFGLEVBQXNCO0FBQ3RDLFdBQVEsVUFBU0QsT0FBUSxJQUFHQyxPQUFPLENBQUNDLE9BQVEsMkJBQXJDLENBQWdFQyxLQUFoRSxHQUNDLHFCQUFvQkYsT0FBTyxDQUFDRyxjQUFSLENBQXVCRCxLQUFNLElBRGxELEdBRUMsb0JBQW1CRSxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsT0FBTyxDQUFDTSxhQUF2QixFQUFzQ0osS0FBTSxFQUZ2RTtBQUdEOztBQUVESyxFQUFBQSx1QkFBdUIsQ0FBRUMsYUFBRixFQUFpQjtBQUN0QyxVQUFNQyxhQUFhLEdBQUcvQixpQkFBaUIsQ0FBQ2dDLE1BQWxCLENBQXlCLENBQUNDLEdBQUQsRUFBTUMsS0FBTixLQUM3Q0osYUFBYSxDQUFDSSxLQUFELENBQWIsR0FBdUJELEdBQXZCLEdBQTZCLENBQUMsR0FBR0EsR0FBSixFQUFTQyxLQUFULENBRFQsRUFFbkIsRUFGbUIsQ0FBdEI7O0FBSUEsUUFBSSxDQUFDQyxnQkFBRUMsT0FBRixDQUFVTCxhQUFWLENBQUwsRUFBK0I7QUFDN0IsWUFBTSxJQUFJTSxLQUFKLENBQVcsaUVBQUQsR0FDQyxnQ0FBK0JYLElBQUksQ0FBQ0MsU0FBTCxDQUFlSSxhQUFmLENBQThCLEVBRHhFLENBQU47QUFFRDtBQUVGOztBQXZDeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEV4dGVuc2lvbkNvbW1hbmQgZnJvbSAnLi9leHRlbnNpb24tY29tbWFuZCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSB9IGZyb20gJy4uL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IHsgS05PV05fRFJJVkVSUyB9IGZyb20gJy4uL2RyaXZlcnMnO1xuXG5jb25zdCBSRVFfRFJJVkVSX0ZJRUxEUyA9IFsnZHJpdmVyTmFtZScsICdhdXRvbWF0aW9uTmFtZScsICdwbGF0Zm9ybU5hbWVzJywgJ21haW5DbGFzcyddO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZXJDb21tYW5kIGV4dGVuZHMgRXh0ZW5zaW9uQ29tbWFuZCB7XG5cbiAgY29uc3RydWN0b3IgKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbiwgdHlwZTogRFJJVkVSX1RZUEV9KTtcbiAgICB0aGlzLmtub3duRXh0ZW5zaW9ucyA9IEtOT1dOX0RSSVZFUlM7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsICh7ZHJpdmVyLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmluc3RhbGwoe2V4dDogZHJpdmVyLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCAoe2RyaXZlcn0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudW5pbnN0YWxsKHtleHQ6IGRyaXZlcn0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlICh7ZHJpdmVyLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnVwZGF0ZSh7ZXh0OiBkcml2ZXIsIHVuc2FmZX0pO1xuICB9XG5cbiAgYXN5bmMgcnVuICh7ZHJpdmVyLCBzY3JpcHROYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5ydW4oe2V4dDogZHJpdmVyLCBzY3JpcHROYW1lfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgRHJpdmVyICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRcXG5gLmdyZWVuICtcbiAgICAgICAgICAgYC0gYXV0b21hdGlvbk5hbWU6ICR7ZXh0RGF0YS5hdXRvbWF0aW9uTmFtZS5ncmVlbn1cXG5gICtcbiAgICAgICAgICAgYC0gcGxhdGZvcm1OYW1lczogJHtKU09OLnN0cmluZ2lmeShleHREYXRhLnBsYXRmb3JtTmFtZXMpLmdyZWVufWA7XG4gIH1cblxuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyAoYXBwaXVtUGtnRGF0YSkge1xuICAgIGNvbnN0IG1pc3NpbmdGaWVsZHMgPSBSRVFfRFJJVkVSX0ZJRUxEUy5yZWR1Y2UoKGFjYywgZmllbGQpID0+IChcbiAgICAgIGFwcGl1bVBrZ0RhdGFbZmllbGRdID8gYWNjIDogWy4uLmFjYywgZmllbGRdXG4gICAgKSwgW10pO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ0ZpZWxkcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFsbGVkIGRyaXZlciBkaWQgbm90IGV4cG9zZSBjb3JyZWN0IGZpZWxkcyBmb3IgY29tcGFiaWxpdHkgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHdpdGggQXBwaXVtLiBNaXNzaW5nIGZpZWxkczogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nRmllbGRzKX1gKTtcbiAgICB9XG5cbiAgfVxuXG59XG4iXSwiZmlsZSI6ImxpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==