obsidian-integration-testing 15.0.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/adb.cjs +2 -2
- package/dist/lib/cjs/adb.d.cts +10 -0
- package/dist/lib/cjs/avd-name-channel.cjs +74 -0
- package/dist/lib/cjs/avd-name-channel.d.cts +152 -0
- package/dist/lib/cjs/avd-probe-verdict.cjs +11 -4
- package/dist/lib/cjs/avd-probe-verdict.d.cts +7 -0
- package/dist/lib/cjs/device-screenshot.cjs +1 -1
- package/dist/lib/cjs/device-screenshot.d.cts +3 -1
- package/dist/lib/cjs/emulator-backend.cjs +22 -1
- package/dist/lib/cjs/emulator-backend.d.cts +81 -0
- package/dist/lib/cjs/emulator-reclaim.cjs +78 -34
- package/dist/lib/cjs/emulator-reclaim.d.cts +57 -9
- package/dist/lib/cjs/enable-plugin.cjs +17 -8
- package/dist/lib/cjs/enable-plugin.d.cts +3 -1
- package/dist/lib/cjs/host-process-query-verdict.cjs +103 -0
- package/dist/lib/cjs/host-process-query-verdict.d.cts +196 -0
- package/dist/lib/cjs/index.cjs +14 -1
- package/dist/lib/cjs/index.d.cts +3 -1
- package/dist/lib/cjs/label-screenshot.cjs +2 -2
- package/dist/lib/cjs/launched-device-selection.cjs +46 -0
- package/dist/lib/cjs/launched-device-selection.d.cts +112 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/paint-out-status-bar.cjs +170 -0
- package/dist/lib/cjs/paint-out-status-bar.d.cts +236 -0
- package/dist/lib/cjs/port-owner-query-verdict.cjs +94 -0
- package/dist/lib/cjs/port-owner-query-verdict.d.cts +161 -0
- package/dist/lib/cjs/resolve-emulator-device-id.cjs +27 -4
- package/dist/lib/cjs/sharp-loader.cjs +1 -1
- package/dist/lib/cjs/sharp-loader.d.cts +67 -2
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +12 -2
- package/dist/lib/cjs/soft-keyboard-geometry.d.cts +17 -2
- package/dist/lib/cjs/soft-keyboard.cjs +130 -28
- package/dist/lib/cjs/soft-keyboard.d.cts +65 -6
- package/dist/lib/cjs/transport-appium.cjs +74 -4
- package/dist/lib/cjs/transport-appium.d.cts +49 -2
- package/dist/lib/cjs/transport-factory.cjs +162 -42
- package/dist/lib/esm/adb.d.mts +10 -0
- package/dist/lib/esm/adb.mjs +2 -2
- package/dist/lib/esm/avd-name-channel.d.mts +152 -0
- package/dist/lib/esm/avd-name-channel.mjs +45 -0
- package/dist/lib/esm/avd-probe-verdict.d.mts +7 -0
- package/dist/lib/esm/avd-probe-verdict.mjs +15 -4
- package/dist/lib/esm/device-screenshot.d.mts +3 -1
- package/dist/lib/esm/device-screenshot.mjs +1 -1
- package/dist/lib/esm/emulator-backend.d.mts +81 -0
- package/dist/lib/esm/emulator-backend.mjs +19 -1
- package/dist/lib/esm/emulator-reclaim.d.mts +57 -9
- package/dist/lib/esm/emulator-reclaim.mjs +84 -36
- package/dist/lib/esm/enable-plugin.d.mts +3 -1
- package/dist/lib/esm/enable-plugin.mjs +17 -8
- package/dist/lib/esm/host-process-query-verdict.d.mts +196 -0
- package/dist/lib/esm/host-process-query-verdict.mjs +74 -0
- package/dist/lib/esm/index.d.mts +3 -1
- package/dist/lib/esm/index.mjs +15 -1
- package/dist/lib/esm/label-screenshot.mjs +2 -2
- package/dist/lib/esm/launched-device-selection.d.mts +112 -0
- package/dist/lib/esm/launched-device-selection.mjs +21 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/paint-out-status-bar.d.mts +236 -0
- package/dist/lib/esm/paint-out-status-bar.mjs +142 -0
- package/dist/lib/esm/port-owner-query-verdict.d.mts +161 -0
- package/dist/lib/esm/port-owner-query-verdict.mjs +73 -0
- package/dist/lib/esm/resolve-emulator-device-id.mjs +32 -4
- package/dist/lib/esm/sharp-loader.d.mts +67 -2
- package/dist/lib/esm/sharp-loader.mjs +1 -1
- package/dist/lib/esm/soft-keyboard-geometry.d.mts +17 -2
- package/dist/lib/esm/soft-keyboard-geometry.mjs +11 -2
- package/dist/lib/esm/soft-keyboard.d.mts +65 -6
- package/dist/lib/esm/soft-keyboard.mjs +131 -28
- package/dist/lib/esm/transport-appium.d.mts +49 -2
- package/dist/lib/esm/transport-appium.mjs +74 -4
- package/dist/lib/esm/transport-factory.mjs +176 -44
- package/package.json +1 -1
package/dist/lib/cjs/adb.cjs
CHANGED
|
@@ -28,7 +28,7 @@ const OUTPUT_MAX_BUFFER_IN_BYTES = 67108864;
|
|
|
28
28
|
async function runAdbBinary(params) {
|
|
29
29
|
const commandArguments = ["-s", params.deviceId, ...params.commandArguments];
|
|
30
30
|
return await new Promise((resolve, reject) => {
|
|
31
|
-
(0, import_node_child_process.execFile)("adb", commandArguments, { encoding: "buffer", maxBuffer: OUTPUT_MAX_BUFFER_IN_BYTES }, (error, stdout) => {
|
|
31
|
+
(0, import_node_child_process.execFile)("adb", commandArguments, { encoding: "buffer", maxBuffer: OUTPUT_MAX_BUFFER_IN_BYTES, timeout: params.timeoutInMilliseconds }, (error, stdout) => {
|
|
32
32
|
if (error) {
|
|
33
33
|
reject(new Error(`Failed to run 'adb ${commandArguments.join(" ")}': ${error.message}. Is ADB installed and in PATH?`));
|
|
34
34
|
return;
|
|
@@ -58,4 +58,4 @@ async function runAdbTextWithoutDevice(commandArguments) {
|
|
|
58
58
|
runAdbText,
|
|
59
59
|
runAdbTextWithoutDevice
|
|
60
60
|
});
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FkYi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJ1bnMgYGFkYmAgYW5kIGhhbmRzIGJhY2sgd2hhdCBpdCBwcmludGVkIFx1MjAxNCBhcyB0ZXh0LCBvciBhcyByYXcgYnl0ZXMuXG4gKlxuICogVGhlIGhhcm5lc3MgYWxyZWFkeSBzaGVsbHMgb3V0IHRvIGBhZGJgIGluIGhhbGYgYSBkb3plbiBwbGFjZXMgaW5zaWRlXG4gKiBgdHJhbnNwb3J0LWZhY3RvcnlgIC8gYHRyYW5zcG9ydC1hcHBpdW1gLCBidXQgYWx3YXlzIHRocm91Z2ggYGV4ZWNgLCB3aGljaFxuICogZGVjb2RlcyBzdGRvdXQgYXMgVVRGLTguIFRoYXQgaXMgZmluZSBmb3IgYGRldmljZXNgIGFuZCBgc2V0dGluZ3MgZ2V0YCBhbmRcbiAqIGZhdGFsbHkgd3JvbmcgZm9yIGBleGVjLW91dCBzY3JlZW5jYXAgLXBgLCB3aG9zZSBzdGRvdXQgaXMgYSBQTkc6IGRlY29kaW5nIGl0XG4gKiBhcyB0ZXh0IGNvcnJ1cHRzIGV2ZXJ5IGJ5dGUgYWJvdmUgMHg3Ri4gSGVuY2UgdGhlIHR3byBydW5uZXJzIGhlcmUgXHUyMDE0IHRoZSBzYW1lXG4gKiBjb21tYW5kIHNoYXBlLCBkaWZmZXJpbmcgb25seSBpbiB3aGV0aGVyIHRoZSBvdXRwdXQgaXMgZGVjb2RlZC5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHByb2Nlc3MgbGF5ZXIgZm9yIHRoZSBkZXZpY2UtZmFjaW5nIGhlbHBlcnMgYSBjYXB0dXJlIHN1aXRlXG4gKiB1c2VzIChgZGV2aWNlLXNjcmVlbnNob3RgLCBgZGV2aWNlLXNldHRpbmdzYCwgYHNvZnQta2V5Ym9hcmRgKTsgdGhleSBhcmUgbm90IGFcbiAqIGdlbmVyYWwtcHVycG9zZSBhZGIgd3JhcHBlciBhbmQgZGVsaWJlcmF0ZWx5IGRvIG5vdCB0cnkgdG8gYmVjb21lIG9uZS5cbiAqXG4gKiBFdmVyeSBmdW5jdGlvbiBoZXJlIHNoZWxscyBvdXQsIHNvIHRoZSB3aG9sZSBtb2R1bGUgaXMgaW50ZWdyYXRpb24tdGltZSBjb2RlLlxuICogVGhhdCBpcyBhbHNvIHdoeSB0aGUgcGFyc2luZyBhbmQgZ2VvbWV0cnkgdGhlc2UgaGVscGVycyBkZXBlbmQgb24gbGl2ZSBpblxuICogdGhlaXIgb3duIG1vZHVsZXMgXHUyMDE0IHRoZSBzYW1lIHNwbGl0IGBhZGItZGV2aWNlLWxpc3RgIGFscmVhZHkgaGFzIGZyb20gdGhlXG4gKiB0cmFuc3BvcnQgZmFjdG9yeSwgc28gYSBzb3J0IHJ1bGUgY2FuIG5ldmVyIG1vdmUgYSB1bml0LXRlc3RlZCBmdW5jdGlvblxuICogaW5zaWRlIGEgY292ZXJhZ2UtaWdub3JlZCBibG9jay5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChzaGVsbHMgb3V0IHRvIGEgcmVhbCBkZXZpY2UpIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJ1bkFkYkJpbmFyeX0gYW5kIHtAbGluayBydW5BZGJUZXh0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5BZGJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwYXNzIGFmdGVyIGAtcyA8ZGV2aWNlSWQ+
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FkYi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJ1bnMgYGFkYmAgYW5kIGhhbmRzIGJhY2sgd2hhdCBpdCBwcmludGVkIFx1MjAxNCBhcyB0ZXh0LCBvciBhcyByYXcgYnl0ZXMuXG4gKlxuICogVGhlIGhhcm5lc3MgYWxyZWFkeSBzaGVsbHMgb3V0IHRvIGBhZGJgIGluIGhhbGYgYSBkb3plbiBwbGFjZXMgaW5zaWRlXG4gKiBgdHJhbnNwb3J0LWZhY3RvcnlgIC8gYHRyYW5zcG9ydC1hcHBpdW1gLCBidXQgYWx3YXlzIHRocm91Z2ggYGV4ZWNgLCB3aGljaFxuICogZGVjb2RlcyBzdGRvdXQgYXMgVVRGLTguIFRoYXQgaXMgZmluZSBmb3IgYGRldmljZXNgIGFuZCBgc2V0dGluZ3MgZ2V0YCBhbmRcbiAqIGZhdGFsbHkgd3JvbmcgZm9yIGBleGVjLW91dCBzY3JlZW5jYXAgLXBgLCB3aG9zZSBzdGRvdXQgaXMgYSBQTkc6IGRlY29kaW5nIGl0XG4gKiBhcyB0ZXh0IGNvcnJ1cHRzIGV2ZXJ5IGJ5dGUgYWJvdmUgMHg3Ri4gSGVuY2UgdGhlIHR3byBydW5uZXJzIGhlcmUgXHUyMDE0IHRoZSBzYW1lXG4gKiBjb21tYW5kIHNoYXBlLCBkaWZmZXJpbmcgb25seSBpbiB3aGV0aGVyIHRoZSBvdXRwdXQgaXMgZGVjb2RlZC5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHByb2Nlc3MgbGF5ZXIgZm9yIHRoZSBkZXZpY2UtZmFjaW5nIGhlbHBlcnMgYSBjYXB0dXJlIHN1aXRlXG4gKiB1c2VzIChgZGV2aWNlLXNjcmVlbnNob3RgLCBgZGV2aWNlLXNldHRpbmdzYCwgYHNvZnQta2V5Ym9hcmRgKTsgdGhleSBhcmUgbm90IGFcbiAqIGdlbmVyYWwtcHVycG9zZSBhZGIgd3JhcHBlciBhbmQgZGVsaWJlcmF0ZWx5IGRvIG5vdCB0cnkgdG8gYmVjb21lIG9uZS5cbiAqXG4gKiBFdmVyeSBmdW5jdGlvbiBoZXJlIHNoZWxscyBvdXQsIHNvIHRoZSB3aG9sZSBtb2R1bGUgaXMgaW50ZWdyYXRpb24tdGltZSBjb2RlLlxuICogVGhhdCBpcyBhbHNvIHdoeSB0aGUgcGFyc2luZyBhbmQgZ2VvbWV0cnkgdGhlc2UgaGVscGVycyBkZXBlbmQgb24gbGl2ZSBpblxuICogdGhlaXIgb3duIG1vZHVsZXMgXHUyMDE0IHRoZSBzYW1lIHNwbGl0IGBhZGItZGV2aWNlLWxpc3RgIGFscmVhZHkgaGFzIGZyb20gdGhlXG4gKiB0cmFuc3BvcnQgZmFjdG9yeSwgc28gYSBzb3J0IHJ1bGUgY2FuIG5ldmVyIG1vdmUgYSB1bml0LXRlc3RlZCBmdW5jdGlvblxuICogaW5zaWRlIGEgY292ZXJhZ2UtaWdub3JlZCBibG9jay5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChzaGVsbHMgb3V0IHRvIGEgcmVhbCBkZXZpY2UpIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJ1bkFkYkJpbmFyeX0gYW5kIHtAbGluayBydW5BZGJUZXh0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5BZGJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwYXNzIGFmdGVyIGAtcyA8ZGV2aWNlSWQ+YCwgZS5nLiBgWydzaGVsbCcsICdpbnB1dCcsICd0YXAnLCAnMTAnLCAnMjAnXWAuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kQXJndW1lbnRzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLCBhcyBgYWRiIGRldmljZXNgIGxpc3RzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGxvbmcgdG8gZ2l2ZSB0aGUgY2FsbCBiZWZvcmUga2lsbGluZyBpdCwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBPbWl0dGVkIFx1MjAxNCB0aGUgZGVmYXVsdCBcdTIwMTQgdGhlIGNhbGwgd2FpdHMgaW5kZWZpbml0ZWx5LCB3aGljaCBpcyByaWdodCBmb3IgdGhlXG4gICAqIGNhcHR1cmUgaGVscGVyczogYSBzY3JlZW5jYXAgb2YgYSBiaWcgZnJhbWVidWZmZXIgaXMgc2xvdywgbm90IHN0dWNrLiBBXG4gICAqIGNhbGxlciB0aGF0IGlzICppZGVudGlmeWluZyogYSBkZXZpY2UgaXQgbWF5IG5vdCBvd24gcGFzc2VzIG9uZSwgYmVjYXVzZVxuICAgKiB0aGVyZSB0aGUgd2hvbGUgcG9pbnQgaXMgdG8gZ2l2ZSB1cCBvbiBhIHdlZGdlZCBndWVzdCByYXRoZXIgdGhhbiBoYW5nIHRoZVxuICAgKiBydW4gYmVoaW5kIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgc2NyZWVuY2FwIG9mIGEgOTAweDE2MDAgZGV2aWNlIHJ1bnMgdG8gYWJvdXQgMTAwIEtCLCBidXQgYSB0YWJsZXQgQVZEJ3MgZnJhbWVidWZmZXIgaXMgc2V2ZXJhbCBNQiBhbmRcbiAqIHRoZSBkZWZhdWx0IDEgTWlCIGBtYXhCdWZmZXJgIGZhaWxzIHRoZSBjYWxsIHJhdGhlciB0aGFuIHJldHVybmluZyBhIHVzYWJsZSBpbWFnZS5cbiAqL1xuY29uc3QgT1VUUFVUX01BWF9CVUZGRVJfSU5fQllURVMgPSA2N18xMDhfODY0O1xuXG4vKipcbiAqIFJ1bnMgYGFkYiAtcyA8ZGV2aWNlSWQ+IDxjb21tYW5kQXJndW1lbnRzPmAgYW5kIHJldHVybnMgc3Rkb3V0ICoqdW5kZWNvZGVkKiouXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSBhcmd1bWVudHMgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmF3IHN0ZG91dCBieXRlcy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYWRiIGNvdWxkIG5vdCBiZSBydW4sIG9yIGV4aXRlZCBub24temVyby5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYFJ1bkFkYlBhcmFtc2AgaXMgb25lIGJhZyBzaGFyZWQgYnkgYHJ1bkFkYkJpbmFyeWAgYW5kIGBydW5BZGJUZXh0YCwgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZGJCaW5hcnkocGFyYW1zOiBSdW5BZGJQYXJhbXMpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgY29tbWFuZEFyZ3VtZW50cyA9IFsnLXMnLCBwYXJhbXMuZGV2aWNlSWQsIC4uLnBhcmFtcy5jb21tYW5kQXJndW1lbnRzXTtcblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGV4ZWNGaWxlKCdhZGInLCBjb21tYW5kQXJndW1lbnRzLCB7IGVuY29kaW5nOiAnYnVmZmVyJywgbWF4QnVmZmVyOiBPVVRQVVRfTUFYX0JVRkZFUl9JTl9CWVRFUywgdGltZW91dDogcGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9LCAoZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiAke2NvbW1hbmRBcmd1bWVudHMuam9pbignICcpfSc6ICR7ZXJyb3IubWVzc2FnZX0uIElzIEFEQiBpbnN0YWxsZWQgYW5kIGluIFBBVEg/YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUnVucyBgYWRiIC1zIDxkZXZpY2VJZD4gPGNvbW1hbmRBcmd1bWVudHM+YCBhbmQgcmV0dXJucyBzdGRvdXQgYXMgdHJpbW1lZCB0ZXh0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlIGFuZCB0aGUgYXJndW1lbnRzIHRvIHJ1bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gc3Rkb3V0LCB3aXRoIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYWRiIGNvdWxkIG5vdCBiZSBydW4sIG9yIGV4aXRlZCBub24temVyby5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYFJ1bkFkYlBhcmFtc2AgaXMgb25lIGJhZyBzaGFyZWQgYnkgYHJ1bkFkYkJpbmFyeWAgYW5kIGBydW5BZGJUZXh0YCwgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZGJUZXh0KHBhcmFtczogUnVuQWRiUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgcnVuQWRiQmluYXJ5KHBhcmFtcyk7XG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoc3Rkb3V0KS50cmltKCk7XG59XG5cbi8qKlxuICogUnVucyBgYWRiIDxjb21tYW5kQXJndW1lbnRzPmAgd2l0aCBubyBkZXZpY2Ugc2VsZWN0ZWQuXG4gKlxuICogT25seSBgZGV2aWNlc2AgbmVlZHMgdGhpcyBcdTIwMTQgZXZlcnkgb3RoZXIgY2FsbCBpbiB0aGlzIGZhbWlseSBhZGRyZXNzZXMgb25lIGRldmljZS5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBzdGRvdXQsIHdpdGggc3Vycm91bmRpbmcgd2hpdGVzcGFjZSByZW1vdmVkLlxuICogQHRocm93cyBFcnJvciBpZiBhZGIgY291bGQgbm90IGJlIHJ1biwgb3IgZXhpdGVkIG5vbi16ZXJvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWRiVGV4dFdpdGhvdXREZXZpY2UoY29tbWFuZEFyZ3VtZW50czogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGV4ZWNGaWxlKCdhZGInLCBbLi4uY29tbWFuZEFyZ3VtZW50c10sIHsgZW5jb2Rpbmc6ICd1dGYtOCcsIG1heEJ1ZmZlcjogT1VUUFVUX01BWF9CVUZGRVJfSU5fQllURVMgfSwgKGVycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcnVuICdhZGIgJHtjb21tYW5kQXJndW1lbnRzLmpvaW4oJyAnKX0nOiAke2Vycm9yLm1lc3NhZ2V9LiBJcyBBREIgaW5zdGFsbGVkIGFuZCBpbiBQQVRIP2ApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHN0ZG91dC50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGdDQUF5QjtBQWdDekIsTUFBTSw2QkFBNkI7QUFVbkMsZUFBc0IsYUFBYSxRQUEyQztBQUM1RSxRQUFNLG1CQUFtQixDQUFDLE1BQU0sT0FBTyxVQUFVLEdBQUcsT0FBTyxnQkFBZ0I7QUFFM0UsU0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUM1Qyw0Q0FBUyxPQUFPLGtCQUFrQixFQUFFLFVBQVUsVUFBVSxXQUFXLDRCQUE0QixTQUFTLE9BQU8sc0JBQXNCLEdBQUcsQ0FBQyxPQUFPLFdBQVc7QUFDekosVUFBSSxPQUFPO0FBQ1QsZUFBTyxJQUFJLE1BQU0sc0JBQXNCLGlCQUFpQixLQUFLLEdBQUcsQ0FBQyxNQUFNLE1BQU0sT0FBTyxpQ0FBaUMsQ0FBQztBQUN0SDtBQUFBLE1BQ0Y7QUFFQSxjQUFRLE1BQU07QUFBQSxJQUNoQixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFVQSxlQUFzQixXQUFXLFFBQXVDO0FBQ3RFLFFBQU0sU0FBUyxNQUFNLGFBQWEsTUFBTTtBQUN4QyxTQUFPLElBQUksWUFBWSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUs7QUFDL0M7QUFXQSxlQUFzQix3QkFBd0Isa0JBQXNEO0FBQ2xHLFNBQU8sTUFBTSxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDNUMsNENBQVMsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxVQUFVLFNBQVMsV0FBVywyQkFBMkIsR0FBRyxDQUFDLE9BQU8sV0FBVztBQUN0SCxVQUFJLE9BQU87QUFDVCxlQUFPLElBQUksTUFBTSxzQkFBc0IsaUJBQWlCLEtBQUssR0FBRyxDQUFDLE1BQU0sTUFBTSxPQUFPLGlDQUFpQyxDQUFDO0FBQ3RIO0FBQUEsTUFDRjtBQUVBLGNBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUN2QixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/cjs/adb.d.cts
CHANGED
|
@@ -32,6 +32,16 @@ export interface RunAdbParams {
|
|
|
32
32
|
* The device to address, as `adb devices` lists it.
|
|
33
33
|
*/
|
|
34
34
|
readonly deviceId: string;
|
|
35
|
+
/**
|
|
36
|
+
* How long to give the call before killing it, in milliseconds.
|
|
37
|
+
*
|
|
38
|
+
* Omitted — the default — the call waits indefinitely, which is right for the
|
|
39
|
+
* capture helpers: a screencap of a big framebuffer is slow, not stuck. A
|
|
40
|
+
* caller that is *identifying* a device it may not own passes one, because
|
|
41
|
+
* there the whole point is to give up on a wedged guest rather than hang the
|
|
42
|
+
* run behind it.
|
|
43
|
+
*/
|
|
44
|
+
readonly timeoutInMilliseconds?: number | undefined;
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
37
47
|
* Runs `adb -s <deviceId> <commandArguments>` and returns stdout **undecoded**.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var avd_name_channel_exports = {};
|
|
20
|
+
__export(avd_name_channel_exports, {
|
|
21
|
+
FIRST_AVD_NAME_CHANNEL: () => FIRST_AVD_NAME_CHANNEL,
|
|
22
|
+
buildAvdNameChannelArguments: () => buildAvdNameChannelArguments,
|
|
23
|
+
buildAvdNameChannelCommand: () => buildAvdNameChannelCommand,
|
|
24
|
+
describeAdbCommand: () => describeAdbCommand,
|
|
25
|
+
parseAvdNameAnswer: () => parseAvdNameAnswer,
|
|
26
|
+
resolveNextAvdNameChannel: () => resolveNextAvdNameChannel
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(avd_name_channel_exports);
|
|
29
|
+
var import_type_guards = require("./type-guards.cjs");
|
|
30
|
+
const FIRST_AVD_NAME_CHANNEL = "getprop-boot";
|
|
31
|
+
const AVD_NAME_PROPERTY_BY_CHANNEL = {
|
|
32
|
+
"getprop-boot": "ro.boot.qemu.avd_name",
|
|
33
|
+
"getprop-kernel": "ro.kernel.qemu.avd_name"
|
|
34
|
+
};
|
|
35
|
+
function buildAvdNameChannelArguments(params) {
|
|
36
|
+
return ["-s", params.deviceId, ...buildAvdNameChannelCommand(params.channel)];
|
|
37
|
+
}
|
|
38
|
+
function buildAvdNameChannelCommand(channel) {
|
|
39
|
+
return channel === "console" ? ["emu", "avd", "name"] : ["shell", "getprop", AVD_NAME_PROPERTY_BY_CHANNEL[channel]];
|
|
40
|
+
}
|
|
41
|
+
function describeAdbCommand(commandArguments) {
|
|
42
|
+
return `adb ${commandArguments.join(" ")}`;
|
|
43
|
+
}
|
|
44
|
+
function parseAvdNameAnswer(stdout) {
|
|
45
|
+
const lineBreakIndex = stdout.indexOf("\n");
|
|
46
|
+
const firstLine = lineBreakIndex === -1 ? stdout : stdout.slice(0, lineBreakIndex);
|
|
47
|
+
return firstLine.trim();
|
|
48
|
+
}
|
|
49
|
+
function resolveNextAvdNameChannel(params) {
|
|
50
|
+
switch (params.channel) {
|
|
51
|
+
case "console": {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
case "getprop-boot": {
|
|
55
|
+
return params.didChannelRespond ? "getprop-kernel" : "console";
|
|
56
|
+
}
|
|
57
|
+
case "getprop-kernel": {
|
|
58
|
+
return "console";
|
|
59
|
+
}
|
|
60
|
+
default: {
|
|
61
|
+
return (0, import_type_guards.assertNever)(params.channel);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
FIRST_AVD_NAME_CHANNEL,
|
|
68
|
+
buildAvdNameChannelArguments,
|
|
69
|
+
buildAvdNameChannelCommand,
|
|
70
|
+
describeAdbCommand,
|
|
71
|
+
parseAvdNameAnswer,
|
|
72
|
+
resolveNextAvdNameChannel
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1uYW1lLWNoYW5uZWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgY2hhbm5lbHMgYSBydW4gY2FuIGFzayAqXCJ3aGljaCBBVkQgaXMgdGhpcyBkZXZpY2Ugc2VydmluZz9cIiosIGFuZCB0aGVcbiAqIG9yZGVyIHRvIGFzayB0aGVtIGluLlxuICpcbiAqICoqTDQ3KiogbWFkZSB0aGUgYWRvcHRpb24gcHJvYmUgcmVmdXNlIHJhdGhlciB0aGFuIGNvbGxpZGUgd2hlbiBhIGRldmljZSBkaWRcbiAqIG5vdCBhbnN3ZXIuIEl0IGFza2VkIHRoYXQgcXVlc3Rpb24gb3ZlciB0aGUgZW11bGF0b3IncyAqKmNvbnNvbGUqKiBcdTIwMTQgYSBzZWNvbmRcbiAqIFRDUCBwb3J0LCB3aXRoIGl0cyBvd24gYXV0aCB0b2tlbiBhbmQgaXRzIG93biB3YXlzIG9mIHdlZGdpbmcsIGVudGlyZWx5XG4gKiBzZXBhcmF0ZSBmcm9tIHRoZSBgYWRiZGAgY2hhbm5lbCBldmVyeSBvdGhlciBjYWxsIGluIHRoZSBydW4gdHJhdmVscy4gU28gYVxuICogc2luZ2xlIGVtdWxhdG9yIHdob3NlIGNvbnNvbGUgaXMgd2VkZ2VkIFx1MjAxNCByb3V0aW5lbHkgKiphbm90aGVyIHByb2plY3QncyoqLFxuICogd2l0aCB0aGUgYnVsayBydW5uZXIgc3dlZXBpbmcgc2V2ZXJhbCBwcm9qZWN0cyBhdCBvbmNlIFx1MjAxNCB0b29rIGV2ZXJ5IE9ic2lkaWFuXG4gKiBBbmRyb2lkIHN1aXRlIG9uIHRoZSBtYWNoaW5lIG91dCBvZiBzZXJ2aWNlOlxuICpcbiAqIGBgYHRleHRcbiAqIFt0cmFuc3BvcnQtZmFjdG9yeTpvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bV0gQVZEIHByb2JlOiBlbXVsYXRvci01NTcwPW5vLWFuc3dlci5cbiAqIEVycm9yOiBBVkQgXCJvYnNpZGlhbl90ZXN0XCI6IGRldmljZSBlbXVsYXRvci01NTcwIGRpZCBub3QgYW5zd2VyIGBhZGIgLXMgZW11bGF0b3ItNTU3MCBlbXUgYXZkIG5hbWVgIC4uLlxuICogYGBgXG4gKlxuICogYGFkYiBkZXZpY2VzYCBsaXN0ZWQgYGVtdWxhdG9yLTU1NzBgIGFzIGBkZXZpY2VgIGFuZCBhZGIgaXRzZWxmIHdhcyBwZXJmZWN0bHlcbiAqIHJlc3BvbnNpdmUgdGhyb3VnaG91dDsgb25seSBpdHMgY29uc29sZSB3YXMgZ29uZS4gVGhlIHJlZnVzYWwgd2FzIHJpZ2h0IFx1MjAxNFxuICogbGF1bmNoaW5nIGEgc2Vjb25kIGNvcHkgb2YgYW4gQVZEIGhpdHMgYEZBVEFMIHwgUnVubmluZyBtdWx0aXBsZSBlbXVsYXRvcnNcbiAqIHdpdGggdGhlIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlYCBcdTIwMTQgYnV0IGl0IHdhcyBrZXllZCBvbiB0aGUgb25lXG4gKiBjaGFubmVsIHRoZSBydW4gZG9lcyAqKm5vdCoqIG90aGVyd2lzZSBkZXBlbmQgb24uXG4gKlxuICogVGhlIEFWRCBuYW1lIGlzIGFsc28gYSBndWVzdCBzeXN0ZW0gcHJvcGVydHksIHJlYWRhYmxlIG92ZXIgdGhlIHNhbWUgYGFkYmRgXG4gKiBjaGFubmVsIHRoZSBydW4gbmVlZHMgYW55d2F5LCBzbyBpdCBjYW5ub3QgYmUgd2VkZ2VkIGluZGVwZW5kZW50bHkgb2YgdGhlXG4gKiBjb25uZWN0aW9uIHRoZSBydW4gaXMgYWJvdXQgdG8gdXNlOlxuICpcbiAqIGBgYHRleHRcbiAqIGFkYiAtcyA8ZGV2aWNlPiBzaGVsbCBnZXRwcm9wIHJvLmJvb3QucWVtdS5hdmRfbmFtZSAgICAgIyBtb2Rlcm4gaW1hZ2VzXG4gKiBhZGIgLXMgPGRldmljZT4gc2hlbGwgZ2V0cHJvcCByby5rZXJuZWwucWVtdS5hdmRfbmFtZSAgICMgb2xkZXIgaW1hZ2VzXG4gKiBgYGBcbiAqXG4gKiBIZW5jZSB0aGlzIG9yZGVyaW5nOiBwcm9wZXJ0eSBmaXJzdCwgY29uc29sZSBvbmx5IGFzIGEgZmFsbGJhY2sgZm9yIGFuIGltYWdlXG4gKiB0aGF0IHJlcG9ydHMgbmVpdGhlci4gVGhlIGhhcmQgcmVmdXNhbCBzdGF5cyBmb3IgdGhlIGdlbnVpbmVseS11bmtub3dhYmxlXG4gKiBkZXZpY2UgXHUyMDE0IGEgc2lsZW50IG9uZSBtYXkgd2VsbCBiZSB0aGUgQVZEJ3MgaG9sZGVyIFx1MjAxNCBpdCBpcyBzaW1wbHkgcmVhY2hlZCBmYXJcbiAqIGxlc3Mgb2Z0ZW4uXG4gKlxuICogKipBIGRlYWQgY2hhbm5lbCBpcyBub3QgYXNrZWQgdHdpY2UuKiogV2hlbiB0aGUgYGFkYiBzaGVsbGAgY2FsbCBpdHNlbGYgZmFpbHNcbiAqIG9yIHRpbWVzIG91dCwgdGhlIHNlY29uZCBwcm9wZXJ0eSBrZXkgaXMgc2tpcHBlZDogaXQgdHJhdmVscyB0aGUgc2FtZSBjaGFubmVsXG4gKiB0aGF0IGhhcyBqdXN0IHByb3ZlZCB1bnVzYWJsZSwgYW5kIHdvdWxkIG9ubHkgc3BlbmQgYW5vdGhlciBmdWxsIHRpbWVvdXQgdG9cbiAqIGxlYXJuIHRoZSBzYW1lIHRoaW5nLiBBbiAqYW5zd2VyZWQqIGJ1dCBlbXB0eSBwcm9wZXJ0eSBpcyB0aGUgb3Bwb3NpdGUgXHUyMDE0IHRoZVxuICogY2hhbm5lbCBpcyBhbGl2ZSBhbmQgdGhlIGltYWdlIHNpbXBseSBkb2VzIG5vdCBjYXJyeSB0aGF0IGtleSBcdTIwMTQgc28gdGhlXG4gKiBjaGVhcGVyIHNpYmxpbmcga2V5IGlzIHdvcnRoIGFza2luZy4gVGhhdCBkaXN0aW5jdGlvbiBpcyB3aGF0IGtlZXBzIGEgd2VkZ2VkXG4gKiBkZXZpY2UncyB3b3JzdCBjYXNlIGF0IHR3byB0aW1lb3V0cyBwZXIgYXR0ZW1wdCByYXRoZXIgdGhhbiB0aHJlZS5cbiAqXG4gKiBQdXJlIGFuZCB1bml0LXRlc3RlZDsgdGhlIGBhZGJgIHJvdW5kLXRyaXBzIGxpdmUgaW4gYHRyYW5zcG9ydC1mYWN0b3J5YCBhbmRcbiAqIGByZXNvbHZlLWVtdWxhdG9yLWRldmljZS1pZGAsIHdoaWNoIGFyZSBpbnRlZ3JhdGlvbi10aW1lIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLmNqcyc7XG5cbi8qKlxuICogT25lIHdheSBvZiBhc2tpbmcgYSBkZXZpY2Ugd2hpY2ggQVZEIGl0IHdhcyBzdGFydGVkIGZyb20uXG4gKlxuICogYGdldHByb3AtYm9vdGAgYW5kIGBnZXRwcm9wLWtlcm5lbGAgdHJhdmVsIGBhZGJkYCBcdTIwMTQgdGhlIGNoYW5uZWwgdGhlIHJ1blxuICogZGVwZW5kcyBvbiBhbnl3YXk7IGBjb25zb2xlYCBpcyB0aGUgZW11bGF0b3IncyBvd24gVENQIGNvbnNvbGUsIHdoaWNoIGNhblxuICogd2VkZ2Ugb24gaXRzIG93bi5cbiAqL1xuZXhwb3J0IHR5cGUgQXZkTmFtZUNoYW5uZWwgPSAnY29uc29sZScgfCAnZ2V0cHJvcC1ib290JyB8ICdnZXRwcm9wLWtlcm5lbCc7XG5cbi8qKlxuICogV2hhdCBvbmUgY2hhbm5lbCBhbnN3ZXJlZC5cbiAqXG4gKiBUaGUgdHdvIGZpZWxkcyBhcmUgZGVsaWJlcmF0ZWx5IGluZGVwZW5kZW50OiBhIGNoYW5uZWwgY2FuIHJlc3BvbmQgYW5kIHJlcG9ydFxuICogKipub3RoaW5nKiogKGFuIGltYWdlIHdpdGhvdXQgdGhhdCBwcm9wZXJ0eSksIHdoaWNoIGlzIGEgZmFjdCBhYm91dCB0aGVcbiAqIGltYWdlLCB3aGlsZSBhIGNoYW5uZWwgdGhhdCBkaWQgbm90IHJlc3BvbmQgaXMgYSBmYWN0IGFib3V0IHRoZSBjaGFubmVsLlxuICogQ29sbGFwc2luZyB0aGVtIGlzIHRoZSBkZWZlY3QgKipMNDcqKiBmaXhlZCBvbmUgbGV2ZWwgdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZkTmFtZUNoYW5uZWxBbnN3ZXIge1xuICAvKipcbiAgV2hldGhlciB0aGUgY29tbWFuZCBpdHNlbGYgY29tcGxldGVkIFx1MjAxNCByZWdhcmRsZXNzIG9mIHdoYXQgaXQgcmVwb3J0ZWQuXG4gICAqL1xuICByZWFkb25seSBkaWRSZXNwb25kOiBib29sZWFuO1xuXG4gIC8qKlxuICBUaGUgQVZEIG5hbWUgaXQgcmVwb3J0ZWQsIG9yIGAnJ2Agd2hlbiBpdCByZXBvcnRlZCBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0ZWRBdmROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQXZkTmFtZUNoYW5uZWxBcmd1bWVudHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQXZkTmFtZUNoYW5uZWxBcmd1bWVudHNQYXJhbXMge1xuICAvKipcbiAgVGhlIGNoYW5uZWwgdG8gYXNrLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbDogQXZkTmFtZUNoYW5uZWw7XG5cbiAgLyoqXG4gIFRoZSBkZXZpY2UgdG8gYWRkcmVzcywgb3IgYSBwbGFjZWhvbGRlciBzdWNoIGFzIGA8ZGV2aWNlPmAgd2hlbiBidWlsZGluZyBhIG1lc3NhZ2UgYWJvdXQgc2V2ZXJhbC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVOZXh0QXZkTmFtZUNoYW5uZWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVOZXh0QXZkTmFtZUNoYW5uZWxQYXJhbXMge1xuICAvKipcbiAgVGhlIGNoYW5uZWwgdGhhdCB3YXMganVzdCBhc2tlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWw6IEF2ZE5hbWVDaGFubmVsO1xuXG4gIC8qKlxuICBXaGV0aGVyIHRoYXQgY2hhbm5lbCdzIGNvbW1hbmQgY29tcGxldGVkIGF0IGFsbC5cbiAgICovXG4gIHJlYWRvbmx5IGRpZENoYW5uZWxSZXNwb25kOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBjaGFubmVsIGEgcHJvYmUgc3RhcnRzIHdpdGg6IHRoZSBndWVzdCBwcm9wZXJ0eSwgb3ZlciBgYWRiZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBGSVJTVF9BVkRfTkFNRV9DSEFOTkVMOiBBdmROYW1lQ2hhbm5lbCA9ICdnZXRwcm9wLWJvb3QnO1xuXG4vKipcbiAqIFRoZSBzeXN0ZW0gcHJvcGVydHkgZWFjaCBgZ2V0cHJvcGAgY2hhbm5lbCByZWFkcy5cbiAqXG4gKiBgcm8uYm9vdC5xZW11LmF2ZF9uYW1lYCBpcyB3aGF0IGN1cnJlbnQgc3lzdGVtIGltYWdlcyBjYXJyeTtcbiAqIGByby5rZXJuZWwucWVtdS5hdmRfbmFtZWAgaXMgdGhlIG9sZGVyIHNwZWxsaW5nLCBzdGlsbCBwcmVzZW50IG9uIGltYWdlcyB0aGVcbiAqIGhhcm5lc3Mgc3VwcG9ydHMuXG4gKi9cbmNvbnN0IEFWRF9OQU1FX1BST1BFUlRZX0JZX0NIQU5ORUwgPSB7XG4gICdnZXRwcm9wLWJvb3QnOiAncm8uYm9vdC5xZW11LmF2ZF9uYW1lJyxcbiAgJ2dldHByb3Ata2VybmVsJzogJ3JvLmtlcm5lbC5xZW11LmF2ZF9uYW1lJ1xufSBhcyBjb25zdDtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGBhZGJgIGFyZ3VtZW50cyB0aGF0IGFzayBvbmUgY2hhbm5lbCBmb3IgdGhlIEFWRCBuYW1lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY2hhbm5lbCB0byBhc2sgYW5kIHRoZSBkZXZpY2UgdG8gYWRkcmVzcy5cbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byBgYWRiYCwgc3RhcnRpbmcgd2l0aCBgLXMgPGRldmljZUlkPmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEF2ZE5hbWVDaGFubmVsQXJndW1lbnRzKHBhcmFtczogQnVpbGRBdmROYW1lQ2hhbm5lbEFyZ3VtZW50c1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsnLXMnLCBwYXJhbXMuZGV2aWNlSWQsIC4uLmJ1aWxkQXZkTmFtZUNoYW5uZWxDb21tYW5kKHBhcmFtcy5jaGFubmVsKV07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBgYWRiYCBhcmd1bWVudHMgdGhhdCBmb2xsb3cgYC1zIDxkZXZpY2VJZD5gLlxuICpcbiAqIFNwbGl0IGZyb20ge0BsaW5rIGJ1aWxkQXZkTmFtZUNoYW5uZWxBcmd1bWVudHN9IGJlY2F1c2UgdGhlIHR3byBjYWxsZXJzXG4gKiBhZGRyZXNzIHRoZWlyIGRldmljZSBkaWZmZXJlbnRseTogYHRyYW5zcG9ydC1mYWN0b3J5YCBzaGVsbHMgb3V0IHRvIGBhZGJgXG4gKiBpdHNlbGYsIHdoaWxlIGByZXNvbHZlLWVtdWxhdG9yLWRldmljZS1pZGAgZ29lcyB0aHJvdWdoIGBhZGIudHNgLCB3aGljaFxuICogcHJlcGVuZHMgYC1zIDxkZXZpY2VJZD5gIG9mIGl0cyBvd24uXG4gKlxuICogQHBhcmFtIGNoYW5uZWwgLSBUaGUgY2hhbm5lbCB0byBhc2suXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBhcmd1bWVudHMsIHdpdGhvdXQgYW55IGRldmljZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEF2ZE5hbWVDaGFubmVsQ29tbWFuZChjaGFubmVsOiBBdmROYW1lQ2hhbm5lbCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNoYW5uZWwgPT09ICdjb25zb2xlJyA/IFsnZW11JywgJ2F2ZCcsICduYW1lJ10gOiBbJ3NoZWxsJywgJ2dldHByb3AnLCBBVkRfTkFNRV9QUk9QRVJUWV9CWV9DSEFOTkVMW2NoYW5uZWxdXTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGBhZGJgIGFyZ3VtZW50cyBhcyB0aGUgY29tbWFuZCBsaW5lIGEgcmVhZGVyIGNhbiBwYXN0ZS5cbiAqXG4gKiBCdWlsdCBmcm9tIHRoZSBhcmd1bWVudHMgdGhlIHJ1biBhY3R1YWxseSBwYXNzZXMgcmF0aGVyIHRoYW4gd3JpdHRlbiBvdXQgYVxuICogc2Vjb25kIHRpbWUsIHNvIGEgbWVzc2FnZSBjYW4gbmV2ZXIgcXVvdGUgYSBjb21tYW5kIHRoZSBjb2RlIGRvZXMgbm90IHJ1bi5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGBhZGJgLlxuICogQHJldHVybnMgVGhlIGZ1bGwgY29tbWFuZCBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVBZGJDb21tYW5kKGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBhZGIgJHtjb21tYW5kQXJndW1lbnRzLmpvaW4oJyAnKX1gO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBBVkQgbmFtZSBvdXQgb2Ygd2hhdCBhIGNoYW5uZWwgcHJpbnRlZC5cbiAqXG4gKiBCb3RoIGNoYW5uZWxzIGFuc3dlciBvbiB0aGUgZmlyc3QgbGluZSBcdTIwMTQgYGdldHByb3BgIHByaW50cyB0aGUgdmFsdWUgKGFuIGVtcHR5XG4gKiBsaW5lIHdoZW4gdGhlIHByb3BlcnR5IGlzIHVuc2V0KSwgdGhlIGNvbnNvbGUgcHJpbnRzIHRoZSBuYW1lIGFuZCB0aGVuIGBPS2AuXG4gKlxuICogQHBhcmFtIHN0ZG91dCAtIFdoYXQgdGhlIGNvbW1hbmQgcHJpbnRlZC5cbiAqIEByZXR1cm5zIFRoZSByZXBvcnRlZCBBVkQgbmFtZSwgb3IgYCcnYCB3aGVuIGl0IHJlcG9ydGVkIG5vbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUF2ZE5hbWVBbnN3ZXIoc3Rkb3V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvKlxuICAgKiBTbGljZWQgcmF0aGVyIHRoYW4gYW4gaW5kZXhlZCByZWFkIHdpdGggYSBgPz8gJydgIGZhbGxiYWNrOiBubyBpbnB1dCBjYW5cbiAgICogcmVhY2ggdGhhdCBmYWxsYmFjaywgYW5kIHRoZSBwZXItZmlsZSBjb3ZlcmFnZSBnYXRlIHRoZW4gcmVwb3J0cyBpdCBhcyBhblxuICAgKiB1bmNvdmVyZWQgYnJhbmNoIGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGxpZmUuXG4gICAqL1xuICBjb25zdCBsaW5lQnJlYWtJbmRleCA9IHN0ZG91dC5pbmRleE9mKCdcXG4nKTtcbiAgY29uc3QgZmlyc3RMaW5lID0gbGluZUJyZWFrSW5kZXggPT09IC0xID8gc3Rkb3V0IDogc3Rkb3V0LnNsaWNlKDAsIGxpbmVCcmVha0luZGV4KTtcblxuICByZXR1cm4gZmlyc3RMaW5lLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgbmV4dCBjaGFubmVsIHRvIGFzayBhZnRlciBvbmUgZmFpbGVkIHRvIGlkZW50aWZ5IHRoZSBkZXZpY2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjaGFubmVsIGp1c3QgYXNrZWQsIGFuZCB3aGV0aGVyIGl0cyBjb21tYW5kIGNvbXBsZXRlZC5cbiAqIEByZXR1cm5zIFRoZSBuZXh0IGNoYW5uZWwsIG9yIGB1bmRlZmluZWRgIG9uY2UgZXZlcnkgY2hhbm5lbCBoYXMgYmVlbiBhc2tlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVOZXh0QXZkTmFtZUNoYW5uZWwocGFyYW1zOiBSZXNvbHZlTmV4dEF2ZE5hbWVDaGFubmVsUGFyYW1zKTogQXZkTmFtZUNoYW5uZWwgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHBhcmFtcy5jaGFubmVsKSB7XG4gICAgY2FzZSAnY29uc29sZSc6IHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNhc2UgJ2dldHByb3AtYm9vdCc6IHtcbiAgICAgIC8qXG4gICAgICAgKiBBIGBnZXRwcm9wYCB0aGF0IG5ldmVyIGNhbWUgYmFjayBzYXlzIHRoZSBgYWRiZGAgY2hhbm5lbCBpcyB1bnVzYWJsZSxcbiAgICAgICAqIHNvIHRoZSBzaWJsaW5nIGtleSBcdTIwMTQgd2hpY2ggdHJhdmVscyB0aGF0IHNhbWUgY2hhbm5lbCBcdTIwMTQgd291bGQgb25seSBzcGVuZFxuICAgICAgICogYW5vdGhlciBmdWxsIHRpbWVvdXQuIEEgY2hhbm5lbCB0aGF0IGFuc3dlcmVkIG5vdGhpbmcgc2F5cyBvbmx5IHRoYXRcbiAgICAgICAqIHRoaXMgaW1hZ2UgZG9lcyBub3QgY2FycnkgdGhhdCBrZXksIHdoaWNoIHRoZSBzaWJsaW5nIG1heSB3ZWxsIGNhcnJ5LlxuICAgICAgICovXG4gICAgICByZXR1cm4gcGFyYW1zLmRpZENoYW5uZWxSZXNwb25kID8gJ2dldHByb3Ata2VybmVsJyA6ICdjb25zb2xlJztcbiAgICB9XG4gICAgY2FzZSAnZ2V0cHJvcC1rZXJuZWwnOiB7XG4gICAgICByZXR1cm4gJ2NvbnNvbGUnO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocGFyYW1zLmNoYW5uZWwpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtREEseUJBQTRCO0FBZ0VyQixNQUFNLHlCQUF5QztBQVN0RCxNQUFNLCtCQUErQjtBQUFBLEVBQ25DLGdCQUFnQjtBQUFBLEVBQ2hCLGtCQUFrQjtBQUNwQjtBQVFPLFNBQVMsNkJBQTZCLFFBQXNEO0FBQ2pHLFNBQU8sQ0FBQyxNQUFNLE9BQU8sVUFBVSxHQUFHLDJCQUEyQixPQUFPLE9BQU8sQ0FBQztBQUM5RTtBQWFPLFNBQVMsMkJBQTJCLFNBQW1DO0FBQzVFLFNBQU8sWUFBWSxZQUFZLENBQUMsT0FBTyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsV0FBVyw2QkFBNkIsT0FBTyxDQUFDO0FBQ3BIO0FBV08sU0FBUyxtQkFBbUIsa0JBQTZDO0FBQzlFLFNBQU8sT0FBTyxpQkFBaUIsS0FBSyxHQUFHLENBQUM7QUFDMUM7QUFXTyxTQUFTLG1CQUFtQixRQUF3QjtBQU16RCxRQUFNLGlCQUFpQixPQUFPLFFBQVEsSUFBSTtBQUMxQyxRQUFNLFlBQVksbUJBQW1CLEtBQUssU0FBUyxPQUFPLE1BQU0sR0FBRyxjQUFjO0FBRWpGLFNBQU8sVUFBVSxLQUFLO0FBQ3hCO0FBUU8sU0FBUywwQkFBMEIsUUFBcUU7QUFDN0csVUFBUSxPQUFPLFNBQVM7QUFBQSxJQUN0QixLQUFLLFdBQVc7QUFDZCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxnQkFBZ0I7QUFPbkIsYUFBTyxPQUFPLG9CQUFvQixtQkFBbUI7QUFBQSxJQUN2RDtBQUFBLElBQ0EsS0FBSyxrQkFBa0I7QUFDckIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFNBQVM7QUFDUCxpQkFBTyxnQ0FBWSxPQUFPLE9BQU87QUFBQSxJQUNuQztBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* The channels a run can ask *"which AVD is this device serving?"*, and the
|
|
5
|
+
* order to ask them in.
|
|
6
|
+
*
|
|
7
|
+
* **L47** made the adoption probe refuse rather than collide when a device did
|
|
8
|
+
* not answer. It asked that question over the emulator's **console** — a second
|
|
9
|
+
* TCP port, with its own auth token and its own ways of wedging, entirely
|
|
10
|
+
* separate from the `adbd` channel every other call in the run travels. So a
|
|
11
|
+
* single emulator whose console is wedged — routinely **another project's**,
|
|
12
|
+
* with the bulk runner sweeping several projects at once — took every Obsidian
|
|
13
|
+
* Android suite on the machine out of service:
|
|
14
|
+
*
|
|
15
|
+
* ```text
|
|
16
|
+
* [transport-factory:obsidian-android-appium] AVD probe: emulator-5570=no-answer.
|
|
17
|
+
* Error: AVD "obsidian_test": device emulator-5570 did not answer `adb -s emulator-5570 emu avd name` ...
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* `adb devices` listed `emulator-5570` as `device` and adb itself was perfectly
|
|
21
|
+
* responsive throughout; only its console was gone. The refusal was right —
|
|
22
|
+
* launching a second copy of an AVD hits `FATAL | Running multiple emulators
|
|
23
|
+
* with the same AVD is an experimental feature` — but it was keyed on the one
|
|
24
|
+
* channel the run does **not** otherwise depend on.
|
|
25
|
+
*
|
|
26
|
+
* The AVD name is also a guest system property, readable over the same `adbd`
|
|
27
|
+
* channel the run needs anyway, so it cannot be wedged independently of the
|
|
28
|
+
* connection the run is about to use:
|
|
29
|
+
*
|
|
30
|
+
* ```text
|
|
31
|
+
* adb -s <device> shell getprop ro.boot.qemu.avd_name # modern images
|
|
32
|
+
* adb -s <device> shell getprop ro.kernel.qemu.avd_name # older images
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Hence this ordering: property first, console only as a fallback for an image
|
|
36
|
+
* that reports neither. The hard refusal stays for the genuinely-unknowable
|
|
37
|
+
* device — a silent one may well be the AVD's holder — it is simply reached far
|
|
38
|
+
* less often.
|
|
39
|
+
*
|
|
40
|
+
* **A dead channel is not asked twice.** When the `adb shell` call itself fails
|
|
41
|
+
* or times out, the second property key is skipped: it travels the same channel
|
|
42
|
+
* that has just proved unusable, and would only spend another full timeout to
|
|
43
|
+
* learn the same thing. An *answered* but empty property is the opposite — the
|
|
44
|
+
* channel is alive and the image simply does not carry that key — so the
|
|
45
|
+
* cheaper sibling key is worth asking. That distinction is what keeps a wedged
|
|
46
|
+
* device's worst case at two timeouts per attempt rather than three.
|
|
47
|
+
*
|
|
48
|
+
* Pure and unit-tested; the `adb` round-trips live in `transport-factory` and
|
|
49
|
+
* `resolve-emulator-device-id`, which are integration-time code.
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* One way of asking a device which AVD it was started from.
|
|
53
|
+
*
|
|
54
|
+
* `getprop-boot` and `getprop-kernel` travel `adbd` — the channel the run
|
|
55
|
+
* depends on anyway; `console` is the emulator's own TCP console, which can
|
|
56
|
+
* wedge on its own.
|
|
57
|
+
*/
|
|
58
|
+
export type AvdNameChannel = 'console' | 'getprop-boot' | 'getprop-kernel';
|
|
59
|
+
/**
|
|
60
|
+
* What one channel answered.
|
|
61
|
+
*
|
|
62
|
+
* The two fields are deliberately independent: a channel can respond and report
|
|
63
|
+
* **nothing** (an image without that property), which is a fact about the
|
|
64
|
+
* image, while a channel that did not respond is a fact about the channel.
|
|
65
|
+
* Collapsing them is the defect **L47** fixed one level up.
|
|
66
|
+
*/
|
|
67
|
+
export interface AvdNameChannelAnswer {
|
|
68
|
+
/**
|
|
69
|
+
Whether the command itself completed — regardless of what it reported.
|
|
70
|
+
*/
|
|
71
|
+
readonly didRespond: boolean;
|
|
72
|
+
/**
|
|
73
|
+
The AVD name it reported, or `''` when it reported none.
|
|
74
|
+
*/
|
|
75
|
+
readonly reportedAvdName: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parameters for {@link buildAvdNameChannelArguments}.
|
|
79
|
+
*/
|
|
80
|
+
export interface BuildAvdNameChannelArgumentsParams {
|
|
81
|
+
/**
|
|
82
|
+
The channel to ask.
|
|
83
|
+
*/
|
|
84
|
+
readonly channel: AvdNameChannel;
|
|
85
|
+
/**
|
|
86
|
+
The device to address, or a placeholder such as `<device>` when building a message about several.
|
|
87
|
+
*/
|
|
88
|
+
readonly deviceId: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parameters for {@link resolveNextAvdNameChannel}.
|
|
92
|
+
*/
|
|
93
|
+
export interface ResolveNextAvdNameChannelParams {
|
|
94
|
+
/**
|
|
95
|
+
The channel that was just asked.
|
|
96
|
+
*/
|
|
97
|
+
readonly channel: AvdNameChannel;
|
|
98
|
+
/**
|
|
99
|
+
Whether that channel's command completed at all.
|
|
100
|
+
*/
|
|
101
|
+
readonly didChannelRespond: boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The channel a probe starts with: the guest property, over `adbd`.
|
|
105
|
+
*/
|
|
106
|
+
export declare const FIRST_AVD_NAME_CHANNEL: AvdNameChannel;
|
|
107
|
+
/**
|
|
108
|
+
* Builds the `adb` arguments that ask one channel for the AVD name.
|
|
109
|
+
*
|
|
110
|
+
* @param params - The channel to ask and the device to address.
|
|
111
|
+
* @returns The arguments to pass to `adb`, starting with `-s <deviceId>`.
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildAvdNameChannelArguments(params: BuildAvdNameChannelArgumentsParams): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Builds the `adb` arguments that follow `-s <deviceId>`.
|
|
116
|
+
*
|
|
117
|
+
* Split from {@link buildAvdNameChannelArguments} because the two callers
|
|
118
|
+
* address their device differently: `transport-factory` shells out to `adb`
|
|
119
|
+
* itself, while `resolve-emulator-device-id` goes through `adb.ts`, which
|
|
120
|
+
* prepends `-s <deviceId>` of its own.
|
|
121
|
+
*
|
|
122
|
+
* @param channel - The channel to ask.
|
|
123
|
+
* @returns The command arguments, without any device selection.
|
|
124
|
+
*/
|
|
125
|
+
export declare function buildAvdNameChannelCommand(channel: AvdNameChannel): string[];
|
|
126
|
+
/**
|
|
127
|
+
* Renders `adb` arguments as the command line a reader can paste.
|
|
128
|
+
*
|
|
129
|
+
* Built from the arguments the run actually passes rather than written out a
|
|
130
|
+
* second time, so a message can never quote a command the code does not run.
|
|
131
|
+
*
|
|
132
|
+
* @param commandArguments - The arguments passed to `adb`.
|
|
133
|
+
* @returns The full command line.
|
|
134
|
+
*/
|
|
135
|
+
export declare function describeAdbCommand(commandArguments: readonly string[]): string;
|
|
136
|
+
/**
|
|
137
|
+
* Reads the AVD name out of what a channel printed.
|
|
138
|
+
*
|
|
139
|
+
* Both channels answer on the first line — `getprop` prints the value (an empty
|
|
140
|
+
* line when the property is unset), the console prints the name and then `OK`.
|
|
141
|
+
*
|
|
142
|
+
* @param stdout - What the command printed.
|
|
143
|
+
* @returns The reported AVD name, or `''` when it reported none.
|
|
144
|
+
*/
|
|
145
|
+
export declare function parseAvdNameAnswer(stdout: string): string;
|
|
146
|
+
/**
|
|
147
|
+
* Picks the next channel to ask after one failed to identify the device.
|
|
148
|
+
*
|
|
149
|
+
* @param params - The channel just asked, and whether its command completed.
|
|
150
|
+
* @returns The next channel, or `undefined` once every channel has been asked.
|
|
151
|
+
*/
|
|
152
|
+
export declare function resolveNextAvdNameChannel(params: ResolveNextAvdNameChannelParams): AvdNameChannel | undefined;
|
|
@@ -25,6 +25,7 @@ __export(avd_probe_verdict_exports, {
|
|
|
25
25
|
resolveAvdProbeVerdict: () => resolveAvdProbeVerdict
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(avd_probe_verdict_exports);
|
|
28
|
+
var import_avd_name_channel = require("./avd-name-channel.cjs");
|
|
28
29
|
var import_type_guards = require("./type-guards.cjs");
|
|
29
30
|
const EMULATOR_DEVICE_ID_PATTERN = /^emulator-\d+$/;
|
|
30
31
|
function buildAvdProbeSummary(results) {
|
|
@@ -34,10 +35,16 @@ function buildUnreadableDevicesMessage(params) {
|
|
|
34
35
|
const deviceList = params.unreadableDeviceIds.join(", ");
|
|
35
36
|
const isSingle = params.unreadableDeviceIds.length === 1;
|
|
36
37
|
const subject = isSingle ? `device ${deviceList}` : `devices ${deviceList}`;
|
|
37
|
-
const
|
|
38
|
+
const deviceLabel = isSingle ? deviceList : "<device>";
|
|
39
|
+
const propertyCommand = (0, import_avd_name_channel.describeAdbCommand)((0, import_avd_name_channel.buildAvdNameChannelArguments)({ channel: import_avd_name_channel.FIRST_AVD_NAME_CHANNEL, deviceId: deviceLabel }));
|
|
40
|
+
const consoleCommand = (0, import_avd_name_channel.describeAdbCommand)((0, import_avd_name_channel.buildAvdNameChannelArguments)({ channel: "console", deviceId: deviceLabel }));
|
|
38
41
|
const holder = isSingle ? "it is" : "one of them is";
|
|
39
|
-
const
|
|
40
|
-
|
|
42
|
+
const identified = isSingle ? "identified itself" : "identified themselves";
|
|
43
|
+
const owner = isSingle ? "A device this run cannot read is most likely ANOTHER run's" : "Devices this run cannot read are most likely OTHER runs'";
|
|
44
|
+
const killing = isSingle ? "killing it" : "killing them";
|
|
45
|
+
const ownership = isSingle ? "the device is yours" : "the devices are yours";
|
|
46
|
+
const otherRun = isSingle ? "that run" : "those runs";
|
|
47
|
+
return `AVD "${params.avdName}": ${subject} ${identified} over neither \`${propertyCommand}\` (the guest property, over adbd) nor \`${consoleCommand}\` (the emulator's own console) within ${String(params.probeTimeoutInMilliseconds)}ms each (retried once), so this run cannot tell whether ${holder} already serving that AVD. Starting an emulator anyway would collide (\`FATAL | Running multiple emulators with the same AVD is an experimental feature\`), which the emulator reports only to its own stdout. ${owner}: ${killing}, or running \`adb kill-server\`, destroys work this run cannot see, so do that only once you know ${ownership}. Otherwise wait for ${otherRun} to finish, and retry once \`adb devices\` no longer lists it.`;
|
|
41
48
|
}
|
|
42
49
|
function checkIsEmulatorDeviceId(deviceId) {
|
|
43
50
|
return EMULATOR_DEVICE_ID_PATTERN.test(deviceId);
|
|
@@ -81,4 +88,4 @@ function resolveAvdProbeVerdict(results) {
|
|
|
81
88
|
classifyAvdProbe,
|
|
82
89
|
resolveAvdProbeVerdict
|
|
83
90
|
});
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1wcm9iZS12ZXJkaWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgQVZEIGFkb3B0aW9uIHByb2JlIFx1MjAxNCBkZWNpZGluZywgZnJvbSB3aGF0IGVhY2hcbiAqIGNvbm5lY3RlZCBkZXZpY2UgYW5zd2VyZWQsIHdoZXRoZXIgdGhpcyBydW4gbWF5IHJldXNlIG9uZSwgbXVzdCBzdGFydCBpdHNcbiAqIG93biBlbXVsYXRvciwgb3IgY2Fubm90IHNhZmVseSBkbyBlaXRoZXIuXG4gKlxuICogVGhlIHByb2JlIChgYWRiIC1zIDxkZXZpY2U+IGVtdSBhdmQgbmFtZWApIHVzZWQgdG8gZGlzY2FyZCBpdHMgZXJyb3IgYW5kXG4gKiByZXNvbHZlIGAnJ2AsIHNvIGEgY2FsbCB0aGF0ICoqbmV2ZXIgYW5zd2VyZWQqKiB3YXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAqIHRoYXQgYW5zd2VyZWQgKlwiYSBkaWZmZXJlbnQgQVZEXCIqLiBCb3RoIGZlbGwgdGhyb3VnaCB0byBcInN0YXJ0IGEgbmV3XG4gKiBlbXVsYXRvclwiLCB3aGljaCBjb2xsaWRlcyB3aXRoIHRoZSBlbXVsYXRvciBhbHJlYWR5IHNlcnZpbmcgdGhhdCBBVkQ6XG4gKlxuICogYGBgdGV4dFxuICogMTQ6Mjc6NTIuMTE0ICBDaGVja2luZyBleGlzdGluZyBkZXZpY2VzIGZvciBBVkQgXCJvYnNpZGlhbl90ZXN0XCIuLi4gKGNvbm5lY3RlZDogW2VtdWxhdG9yLTU1NTRdKVxuICogMTQ6Mjc6NTcuMTcwICBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2UsIHN0YXJ0aW5nIGEgbmV3IGVtdWxhdG9yLi4uXG4gKiBgYGBcbiAqXG4gKiA1LjA1NnMgYXBhcnQgXHUyMDE0IGV4YWN0bHkgdGhlIHByb2JlJ3Mgb3duIHRpbWVvdXQuIFRoZSBsYXVuY2ggdGhhdCBmb2xsb3dlZCBoaXRcbiAqIGBGQVRBTCB8IFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbFxuICogZmVhdHVyZWAsIHdoaWNoIHRoZSBlbXVsYXRvciB3cml0ZXMgdG8gaXRzIG93biBzdGRvdXQuICoqQSBwcm9iZSB0aGF0IG5ldmVyXG4gKiBhbnN3ZXJlZCBpcyBub3QgZXZpZGVuY2UgdGhhdCB0aGUgYW5zd2VyIGlzIG5vKiogXHUyMDE0IHRoZSBzYW1lIGRpc3RpbmN0aW9uXG4gKiBgYWRiLWRldmljZS1saXN0LnRzYCBkcmF3cyBiZXR3ZWVuIGBvZmZsaW5lYCBhbmQgYWJzZW50LCBhbmQgdGhlIHNhbWUgb25lXG4gKiB0aGUgY29ubmVjdGl2aXR5IHByb2JlIGRyYXdzIGJldHdlZW4gYSBmYWlsZWQgZHVtcCBhbmQgYSBtaXNzaW5nIG5ldHdvcmsuXG4gKlxuICogV29yc2UsIHRoZSBwcm9iZSBpcyBhc2tlZCBpdHMgcXVlc3Rpb24gcHJlY2lzZWx5IHdoZW4gdGhlIGd1ZXN0IGlzIGxlYXN0IGFibGVcbiAqIHRvIGFuc3dlciBpdCBcdTIwMTQgYSB3ZWRnZWQgZW11bGF0b3IgdGltZXMgb3V0IGV2ZXJ5IGBhZGJgIGNhbGwgXHUyMDE0IHdoaWNoIGlzIHRoZVxuICogY29uZGl0aW9uIHVuZGVyIHdoaWNoIGEgY29sbGlkaW5nIGxhdW5jaCBkb2VzIHRoZSBtb3N0IGRhbWFnZS5cbiAqXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCAoZXhjbHVkZWQgZnJvbVxuICogdW5pdCB0ZXN0cykgc28gdGhlIGNsYXNzaWZpY2F0aW9uIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0IHRoZSBmYWN0b3J5IGl0c2VsZlxuICogc2hlbGxzIG91dCB0byBgYWRiYC5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBXaGF0IG9uZSBkZXZpY2UgYW5zd2VyZWQgd2hlbiBhc2tlZCB3aGljaCBBVkQgaXQgaXMgc2VydmluZy5cbiAqXG4gKiBgbm90LWFuLWVtdWxhdG9yYCBhbmQgYG90aGVyLWF2ZGAgYXJlIGJvdGggbGVnaXRpbWF0ZSBza2lwczsgb25seVxuICogYG5vLWFuc3dlcmAgaXMgdGhlIHNpbGVuY2UgdGhhdCBtdXN0IG5ldmVyIGJlIHJlYWQgYXMgb25lLlxuICovXG5leHBvcnQgdHlwZSBBdmRQcm9iZU91dGNvbWUgPSAnbWF0Y2gnIHwgJ25vLWFuc3dlcicgfCAnbm90LWFuLWVtdWxhdG9yJyB8ICdvdGhlci1hdmQnO1xuXG4vKipcbiAqIFRoZSBydW4gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgQVZEIGlzIGFscmVhZHkgcnVubmluZywgc28gaXQgbXVzdCBub3QgbGF1bmNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2ZFByb2JlUmVmdXNlVmVyZGljdCB7XG4gIC8qKlxuICBUaGUgZGV2aWNlcyB0aGF0IGNvdWxkIG5vdCBiZSByZWFkLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBydWxlZCBvdXQgYXMgdGhlIEFWRCdzIGhvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IHVucmVhZGFibGVEZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAncmVmdXNlJztcbn1cblxuLyoqXG4gKiBPbmUgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmRQcm9iZVJlc3VsdCB7XG4gIC8qKlxuICBUaGUgZGV2aWNlIFVESUQsIGUuZy4gYGVtdWxhdG9yLTU1NTRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgV2hhdCB0aGUgZGV2aWNlIGFuc3dlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0Y29tZTogQXZkUHJvYmVPdXRjb21lO1xufVxuXG4vKipcbiAqIFRoZSBBVkQgaXMgYWxyZWFkeSBydW5uaW5nLCBvbiBhIGRldmljZSB0aGlzIHJ1biBtYXkgYWRvcHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZkUHJvYmVSZXVzZVZlcmRpY3Qge1xuICAvKipcbiAgVGhlIGRldmljZSBhbHJlYWR5IHNlcnZpbmcgdGhlIHJlcXVlc3RlZCBBVkQuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAncmV1c2UnO1xufVxuXG4vKipcbiAqIEV2ZXJ5IGRldmljZSBhbnN3ZXJlZCwgbm9uZSBpcyBzZXJ2aW5nIHRoZSBBVkQsIHNvIGxhdW5jaGluZyBjYW5ub3QgY29sbGlkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmRQcm9iZVN0YXJ0TmV3VmVyZGljdCB7XG4gIC8qKlxuICBEaXNjcmltaW5hbnQuXG4gICAqL1xuICByZWFkb25seSB2ZXJkaWN0OiAnc3RhcnQtbmV3Jztcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBydW4gbWF5IGRvLCBnaXZlbiBldmVyeSBkZXZpY2UncyBwcm9iZSBvdXRjb21lLlxuICovXG5leHBvcnQgdHlwZSBBdmRQcm9iZVZlcmRpY3QgPSBBdmRQcm9iZVJlZnVzZVZlcmRpY3QgfCBBdmRQcm9iZVJldXNlVmVyZGljdCB8IEF2ZFByb2JlU3RhcnROZXdWZXJkaWN0O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZFVucmVhZGFibGVEZXZpY2VzTWVzc2FnZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRVbnJlYWRhYmxlRGV2aWNlc01lc3NhZ2VQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgcnVuIHdhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGJ1ZGdldCBlYWNoIHByb2JlIGF0dGVtcHQgd2FzIGdpdmVuLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBwcm9iZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgZGV2aWNlcyB0aGF0IGRpZCBub3QgYW5zd2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5yZWFkYWJsZURldmljZUlkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNsYXNzaWZ5QXZkUHJvYmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzaWZ5QXZkUHJvYmVQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgcnVuIHdhbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgZGV2aWNlIHRoYXQgd2FzIHByb2JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBBVkQgbmFtZSB0aGUgZGV2aWNlIGFuc3dlcmVkLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGRpZCBub3QgYW5zd2VyIGF0IGFsbC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2JlZEF2ZE5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgZGV2aWNlIElEcyBhZGIgZ2l2ZXMgZW11bGF0b3JzIHN0YXJ0ZWQgdGhlIHdheSB0aGlzIGhhcm5lc3NcbiAqIHN0YXJ0cyB0aGVtOiBgZW11bGF0b3IgLWF2ZCA8bmFtZT5gLCB3aG9zZSBjb25zb2xlIGxhbmRzIG9uIGEgbG9jYWwgcG9ydC5cbiAqXG4gKiBPbmx5IHN1Y2ggYSBkZXZpY2UgY2FuIGNvbGxpZGUgd2l0aCB0aGlzIHJ1bidzIGxhdW5jaCwgc28gb25seSBzdWNoIGEgZGV2aWNlJ3NcbiAqIHNpbGVuY2UgaXMgd29ydGggcmVmdXNpbmcgb3Zlci4gQSBwaHlzaWNhbCBoYW5kc2V0IChhbiBhcmJpdHJhcnkgc2VyaWFsKSBvciBhXG4gKiBUQ1AtYXR0YWNoZWQgZGV2aWNlIGFuc3dlcnMgYGFkYiBcdTIwMjYgZW11IGF2ZCBuYW1lYCB3aXRoIGFuIGVycm9yIGhvd2V2ZXIgaGVhbHRoeVxuICogaXQgaXM7IHJlYWRpbmcgdGhhdCBhcyBcImRpZCBub3QgYW5zd2VyXCIgd291bGQgYmxvY2sgZXZlcnkgcnVuIG9uIGEgaG9zdCB3aXRoIGFcbiAqIHBob25lIHBsdWdnZWQgaW4sIHdoaWNoIGlzIGEgd29yc2UgZGVmZWN0IHRoYW4gdGhlIG9uZSB0aGlzIG1vZHVsZSBmaXhlcy5cbiAqL1xuY29uc3QgRU1VTEFUT1JfREVWSUNFX0lEX1BBVFRFUk4gPSAvXmVtdWxhdG9yLVxcZCskLztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1bW1hcnkgbGluZSBuYW1pbmcgd2hhdCBlYWNoIGRldmljZSBhbnN3ZXJlZC5cbiAqXG4gKiBUaGUgb2xkIGxvZyBwcmludGVkIG9ubHkgdGhlIGNvbmNsdXNpb24gKGBub3QgZm91bmQgb24gYW55IGV4aXN0aW5nIGRldmljZWApLFxuICogd2hpY2ggaXMgZXhhY3RseSB0aGUgbGluZSB0aGF0IHdhcyB3cm9uZzsgcHJpbnRpbmcgdGhlIGV2aWRlbmNlIG5leHQgdG8gaXQgaXNcbiAqIHdoYXQgbWFrZXMgYSBiYWQgY29uY2x1c2lvbiB2aXNpYmxlIHdpdGhvdXQgYSBzZWNvbmQgcnVuLlxuICpcbiAqIEBwYXJhbSByZXN1bHRzIC0gRXZlcnkgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqIEByZXR1cm5zIFRoZSBzdW1tYXJ5LCBvciBgbm8gZGV2aWNlc2Agd2hlbiBub3RoaW5nIHdhcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEF2ZFByb2JlU3VtbWFyeShyZXN1bHRzOiByZWFkb25seSBBdmRQcm9iZVJlc3VsdFtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID09PSAwID8gJ25vIGRldmljZXMnIDogcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gYCR7cmVzdWx0LmRldmljZUlkfT0ke3Jlc3VsdC5vdXRjb21lfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSByZWZ1c2FsIG1lc3NhZ2UgZm9yIGRldmljZXMgdGhhdCBjb3VsZCBub3QgYmUgcmVhZC5cbiAqXG4gKiBOYW1lcyB0aGUgZGV2aWNlLCB0aGUgQVZELCB0aGUgYnVkZ2V0LCB0aGUgY29uc2VxdWVuY2UgYW5kIHRoZSByZWNvdmVyeSBcdTIwMTQgdGhlXG4gKiBzaGFwZSBgdGVhcmRvd24tdmVyZGljdC50c2AgdXNlcyBmb3IgaXRzIG93biB3YXJuaW5nLCBiZWNhdXNlIGEgbWVzc2FnZSB0aGF0XG4gKiBzdG9wcyBhIHJ1biBoYXMgdG8gbGVhdmUgdGhlIHJlYWRlciBhYmxlIHRvIHVuYmxvY2sgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBBVkQsIHRoZSBwcm9iZSBidWRnZXQsIGFuZCB0aGUgZGV2aWNlcyB0aGF0IGRpZCBub3QgYW5zd2VyLlxuICogQHJldHVybnMgVGhlIHJlZnVzYWwgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5yZWFkYWJsZURldmljZXNNZXNzYWdlKHBhcmFtczogQnVpbGRVbnJlYWRhYmxlRGV2aWNlc01lc3NhZ2VQYXJhbXMpOiBzdHJpbmcge1xuICAvKlxuICAgKiBXaGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGRldmljZSB0aGUgam9pbmVkIGxpc3QgSVMgaXRzIElELCBzbyB0aGUgc2luZ3VsYXJcbiAgICogd29yZGluZyBuZWVkcyBubyBpbmRleCBhY2Nlc3MgXHUyMDE0IGFuZCBubyB1bnJlYWNoYWJsZSBmYWxsYmFjayBmb3Igb25lLlxuICAgKi9cbiAgY29uc3QgZGV2aWNlTGlzdCA9IHBhcmFtcy51bnJlYWRhYmxlRGV2aWNlSWRzLmpvaW4oJywgJyk7XG4gIGNvbnN0IGlzU2luZ2xlID0gcGFyYW1zLnVucmVhZGFibGVEZXZpY2VJZHMubGVuZ3RoID09PSAxO1xuXG4gIGNvbnN0IHN1YmplY3QgPSBpc1NpbmdsZSA/IGBkZXZpY2UgJHtkZXZpY2VMaXN0fWAgOiBgZGV2aWNlcyAke2RldmljZUxpc3R9YDtcbiAgY29uc3QgY29tbWFuZCA9IGlzU2luZ2xlID8gYGFkYiAtcyAke2RldmljZUxpc3R9IGVtdSBhdmQgbmFtZWAgOiAnYWRiIC1zIDxkZXZpY2U+IGVtdSBhdmQgbmFtZSc7XG4gIGNvbnN0IGhvbGRlciA9IGlzU2luZ2xlID8gJ2l0IGlzJyA6ICdvbmUgb2YgdGhlbSBpcyc7XG4gIGNvbnN0IHJlbWVkeSA9IGlzU2luZ2xlID8gJ0tpbGwgdGhlIHVucmVzcG9uc2l2ZSBkZXZpY2UnIDogJ0tpbGwgdGhlIHVucmVzcG9uc2l2ZSBkZXZpY2VzJztcblxuICByZXR1cm4gYEFWRCBcIiR7cGFyYW1zLmF2ZE5hbWV9XCI6ICR7c3ViamVjdH0gZGlkIG5vdCBhbnN3ZXIgXFxgJHtjb21tYW5kfVxcYCB3aXRoaW4gJHtTdHJpbmcocGFyYW1zLnByb2JlVGltZW91dEluTWlsbGlzZWNvbmRzKX1tcyAocmV0cmllZCBvbmNlKSwgYFxuICAgICsgYHNvIHRoaXMgcnVuIGNhbm5vdCB0ZWxsIHdoZXRoZXIgJHtob2xkZXJ9IGFscmVhZHkgc2VydmluZyB0aGF0IEFWRC4gU3RhcnRpbmcgYW4gZW11bGF0b3IgYW55d2F5IHdvdWxkIGNvbGxpZGUgYFxuICAgICsgJyhgRkFUQUwgfCBSdW5uaW5nIG11bHRpcGxlIGVtdWxhdG9ycyB3aXRoIHRoZSBzYW1lIEFWRCBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZWApLCB3aGljaCB0aGUgZW11bGF0b3IgcmVwb3J0cyBvbmx5IHRvIGl0cyBvd24gc3Rkb3V0LiAnXG4gICAgKyBgJHtyZW1lZHl9LCBvciBydW4gXFxgYWRiIGtpbGwtc2VydmVyXFxgLCB0aGVuIHJldHJ5LmA7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGV2aWNlIGNhbiBob2xkIGFuIEFWRCB0aGlzIHJ1biBjb3VsZCBjb2xsaWRlIHdpdGguXG4gKlxuICogQHBhcmFtIGRldmljZUlkIC0gVGhlIGRldmljZSBVRElEIHRvIGp1ZGdlLlxuICogQHJldHVybnMgYHRydWVgIGZvciBhIGxvY2FsbHkgc3RhcnRlZCBlbXVsYXRvciwgd2hvc2UgY29uc29sZSB0aGlzIHJ1biBjYW4gYXNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc0VtdWxhdG9yRGV2aWNlSWQoZGV2aWNlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gRU1VTEFUT1JfREVWSUNFX0lEX1BBVFRFUk4udGVzdChkZXZpY2VJZCk7XG59XG5cbi8qKlxuICogQ2xhc3NpZmllcyBvbmUgZGV2aWNlJ3MgcHJvYmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBBVkQgd2FudGVkLCB0aGUgZGV2aWNlIHByb2JlZCwgYW5kIHdoYXQgaXQgYW5zd2VyZWQuXG4gKiBAcmV0dXJucyBUaGUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5QXZkUHJvYmUocGFyYW1zOiBDbGFzc2lmeUF2ZFByb2JlUGFyYW1zKTogQXZkUHJvYmVPdXRjb21lIHtcbiAgaWYgKCFjaGVja0lzRW11bGF0b3JEZXZpY2VJZChwYXJhbXMuZGV2aWNlSWQpKSB7XG4gICAgcmV0dXJuICdub3QtYW4tZW11bGF0b3InO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5wcm9iZWRBdmROYW1lID09PSB1bmRlZmluZWQgfHwgcGFyYW1zLnByb2JlZEF2ZE5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICduby1hbnN3ZXInO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcy5wcm9iZWRBdmROYW1lID09PSBwYXJhbXMuYXZkTmFtZSA/ICdtYXRjaCcgOiAnb3RoZXItYXZkJztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoYXQgdGhlIHJ1biBtYXkgZG8sIGZyb20gZXZlcnkgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqXG4gKiAqKkEgbWF0Y2ggd2lucyBvdmVyIGFuIHVucmVhZGFibGUgc2libGluZy4qKiBPbmNlIHRoZSByZXF1ZXN0ZWQgQVZEIGlzIGZvdW5kXG4gKiBhbmQgcmV1c2FibGUsIGFuIHVucmVsYXRlZCB3ZWRnZWQgZGV2aWNlIGlzIHNvbWVib2R5IGVsc2UncyBwcm9ibGVtIGFuZCBtdXN0XG4gKiBub3QgYmxvY2sgYSBydW4gdGhhdCBoYXMgZXZlcnl0aGluZyBpdCBuZWVkcyBcdTIwMTQgdGhlIHNhbWUgcmVzdHJhaW50XG4gKiBgZW11bGF0b3ItYmFja2VuZC50c2Agc2hvd3MgaW4gbmV2ZXIgc3dlZXBpbmcgYSBgcWVtdSpgIGl0IGRvZXMgbm90IG93bi4gT25seVxuICogd2hlbiBub3RoaW5nIG1hdGNoZWQgZG9lcyBzaWxlbmNlIGJlY29tZSBkZWNpc2l2ZSwgYmVjYXVzZSBvbmx5IHRoZW4gd291bGQgdGhlXG4gKiBydW4gZ28gb24gdG8gbGF1bmNoLlxuICpcbiAqIEBwYXJhbSByZXN1bHRzIC0gRXZlcnkgZGV2aWNlJ3MgcHJvYmUgb3V0Y29tZS5cbiAqIEByZXR1cm5zIFRoZSB2ZXJkaWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF2ZFByb2JlVmVyZGljdChyZXN1bHRzOiByZWFkb25seSBBdmRQcm9iZVJlc3VsdFtdKTogQXZkUHJvYmVWZXJkaWN0IHtcbiAgY29uc3QgdW5yZWFkYWJsZURldmljZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgc3dpdGNoIChyZXN1bHQub3V0Y29tZSkge1xuICAgICAgY2FzZSAnbWF0Y2gnOiB7XG4gICAgICAgIHJldHVybiB7IGRldmljZUlkOiByZXN1bHQuZGV2aWNlSWQsIHZlcmRpY3Q6ICdyZXVzZScgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ25vLWFuc3dlcic6IHtcbiAgICAgICAgdW5yZWFkYWJsZURldmljZUlkcy5wdXNoKHJlc3VsdC5kZXZpY2VJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbm90LWFuLWVtdWxhdG9yJzpcbiAgICAgIGNhc2UgJ290aGVyLWF2ZCc6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBhc3NlcnROZXZlcihyZXN1bHQub3V0Y29tZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVucmVhZGFibGVEZXZpY2VJZHMubGVuZ3RoID4gMCA/IHsgdW5yZWFkYWJsZURldmljZUlkcywgdmVyZGljdDogJ3JlZnVzZScgfSA6IHsgdmVyZGljdDogJ3N0YXJ0LW5ldycgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDQSx5QkFBNEI7QUF3SDVCLE1BQU0sNkJBQTZCO0FBWTVCLFNBQVMscUJBQXFCLFNBQTRDO0FBQy9FLFNBQU8sUUFBUSxXQUFXLElBQUksZUFBZSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxRQUFRLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFDeEg7QUFZTyxTQUFTLDhCQUE4QixRQUFxRDtBQUtqRyxRQUFNLGFBQWEsT0FBTyxvQkFBb0IsS0FBSyxJQUFJO0FBQ3ZELFFBQU0sV0FBVyxPQUFPLG9CQUFvQixXQUFXO0FBRXZELFFBQU0sVUFBVSxXQUFXLFVBQVUsVUFBVSxLQUFLLFdBQVcsVUFBVTtBQUN6RSxRQUFNLFVBQVUsV0FBVyxVQUFVLFVBQVUsa0JBQWtCO0FBQ2pFLFFBQU0sU0FBUyxXQUFXLFVBQVU7QUFDcEMsUUFBTSxTQUFTLFdBQVcsaUNBQWlDO0FBRTNELFNBQU8sUUFBUSxPQUFPLE9BQU8sTUFBTSxPQUFPLHFCQUFxQixPQUFPLGFBQWEsT0FBTyxPQUFPLDBCQUEwQixDQUFDLHNEQUNyRixNQUFNLGtOQUV0QyxNQUFNO0FBQ2Y7QUFRTyxTQUFTLHdCQUF3QixVQUEyQjtBQUNqRSxTQUFPLDJCQUEyQixLQUFLLFFBQVE7QUFDakQ7QUFRTyxTQUFTLGlCQUFpQixRQUFpRDtBQUNoRixNQUFJLENBQUMsd0JBQXdCLE9BQU8sUUFBUSxHQUFHO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLGtCQUFrQixVQUFhLE9BQU8sY0FBYyxXQUFXLEdBQUc7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE9BQU8sa0JBQWtCLE9BQU8sVUFBVSxVQUFVO0FBQzdEO0FBZU8sU0FBUyx1QkFBdUIsU0FBcUQ7QUFDMUYsUUFBTSxzQkFBZ0MsQ0FBQztBQUV2QyxhQUFXLFVBQVUsU0FBUztBQUM1QixZQUFRLE9BQU8sU0FBUztBQUFBLE1BQ3RCLEtBQUssU0FBUztBQUNaLGVBQU8sRUFBRSxVQUFVLE9BQU8sVUFBVSxTQUFTLFFBQVE7QUFBQSxNQUN2RDtBQUFBLE1BQ0EsS0FBSyxhQUFhO0FBQ2hCLDRCQUFvQixLQUFLLE9BQU8sUUFBUTtBQUN4QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLEtBQUssYUFBYTtBQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFNBQVM7QUFDUCxtQkFBTyxnQ0FBWSxPQUFPLE9BQU87QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTyxvQkFBb0IsU0FBUyxJQUFJLEVBQUUscUJBQXFCLFNBQVMsU0FBUyxJQUFJLEVBQUUsU0FBUyxZQUFZO0FBQzlHOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1wcm9iZS12ZXJkaWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgQVZEIGFkb3B0aW9uIHByb2JlIFx1MjAxNCBkZWNpZGluZywgZnJvbSB3aGF0IGVhY2hcbiAqIGNvbm5lY3RlZCBkZXZpY2UgYW5zd2VyZWQsIHdoZXRoZXIgdGhpcyBydW4gbWF5IHJldXNlIG9uZSwgbXVzdCBzdGFydCBpdHNcbiAqIG93biBlbXVsYXRvciwgb3IgY2Fubm90IHNhZmVseSBkbyBlaXRoZXIuXG4gKlxuICogVGhlIHByb2JlIChgYWRiIC1zIDxkZXZpY2U+IGVtdSBhdmQgbmFtZWApIHVzZWQgdG8gZGlzY2FyZCBpdHMgZXJyb3IgYW5kXG4gKiByZXNvbHZlIGAnJ2AsIHNvIGEgY2FsbCB0aGF0ICoqbmV2ZXIgYW5zd2VyZWQqKiB3YXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAqIHRoYXQgYW5zd2VyZWQgKlwiYSBkaWZmZXJlbnQgQVZEXCIqLiBCb3RoIGZlbGwgdGhyb3VnaCB0byBcInN0YXJ0IGEgbmV3XG4gKiBlbXVsYXRvclwiLCB3aGljaCBjb2xsaWRlcyB3aXRoIHRoZSBlbXVsYXRvciBhbHJlYWR5IHNlcnZpbmcgdGhhdCBBVkQ6XG4gKlxuICogYGBgdGV4dFxuICogMTQ6Mjc6NTIuMTE0ICBDaGVja2luZyBleGlzdGluZyBkZXZpY2VzIGZvciBBVkQgXCJvYnNpZGlhbl90ZXN0XCIuLi4gKGNvbm5lY3RlZDogW2VtdWxhdG9yLTU1NTRdKVxuICogMTQ6Mjc6NTcuMTcwICBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2UsIHN0YXJ0aW5nIGEgbmV3IGVtdWxhdG9yLi4uXG4gKiBgYGBcbiAqXG4gKiA1LjA1NnMgYXBhcnQgXHUyMDE0IGV4YWN0bHkgdGhlIHByb2JlJ3Mgb3duIHRpbWVvdXQuIFRoZSBsYXVuY2ggdGhhdCBmb2xsb3dlZCBoaXRcbiAqIGBGQVRBTCB8IFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbFxuICogZmVhdHVyZWAsIHdoaWNoIHRoZSBlbXVsYXRvciB3cml0ZXMgdG8gaXRzIG93biBzdGRvdXQuICoqQSBwcm9iZSB0aGF0IG5ldmVyXG4gKiBhbnN3ZXJlZCBpcyBub3QgZXZpZGVuY2UgdGhhdCB0aGUgYW5zd2VyIGlzIG5vKiogXHUyMDE0IHRoZSBzYW1lIGRpc3RpbmN0aW9uXG4gKiBgYWRiLWRldmljZS1saXN0LnRzYCBkcmF3cyBiZXR3ZWVuIGBvZmZsaW5lYCBhbmQgYWJzZW50LCBhbmQgdGhlIHNhbWUgb25lXG4gKiB0aGUgY29ubmVjdGl2aXR5IHByb2JlIGRyYXdzIGJldHdlZW4gYSBmYWlsZWQgZHVtcCBhbmQgYSBtaXNzaW5nIG5ldHdvcmsuXG4gKlxuICogV29yc2UsIHRoZSBwcm9iZSBpcyBhc2tlZCBpdHMgcXVlc3Rpb24gcHJlY2lzZWx5IHdoZW4gdGhlIGd1ZXN0IGlzIGxlYXN0IGFibGVcbiAqIHRvIGFuc3dlciBpdCBcdTIwMTQgYSB3ZWRnZWQgZW11bGF0b3IgdGltZXMgb3V0IGV2ZXJ5IGBhZGJgIGNhbGwgXHUyMDE0IHdoaWNoIGlzIHRoZVxuICogY29uZGl0aW9uIHVuZGVyIHdoaWNoIGEgY29sbGlkaW5nIGxhdW5jaCBkb2VzIHRoZSBtb3N0IGRhbWFnZS5cbiAqXG4gKiAqKldoYXQgdGhlIHByb2JlIEFTS1MgbW92ZWQgc2luY2U7IHdoYXQgaXQgZGVjaWRlcyBkaWQgbm90LioqIFRoZSBxdWVzdGlvblxuICogbm93IHRyYXZlbHMgdGhlIGd1ZXN0IHByb3BlcnR5IG92ZXIgYGFkYmRgIGZpcnN0IGFuZCB0aGUgZW11bGF0b3IgY29uc29sZSBvbmx5XG4gKiBhcyBhIGZhbGxiYWNrIChgYXZkLW5hbWUtY2hhbm5lbC50c2ApLCBiZWNhdXNlIGtleWluZyBhIG1hY2hpbmUtd2lkZSByZWZ1c2FsXG4gKiBvbiB0aGUgY29uc29sZSBhbG9uZSBsZXQgb25lIHdlZGdlZCBlbXVsYXRvciBcdTIwMTQgdXN1YWxseSBhbm90aGVyIHByb2plY3QncyBcdTIwMTRcbiAqIHN0b3AgZXZlcnkgQW5kcm9pZCBydW4gb24gdGhlIGhvc3QuIFRoZSBmb3VyIG91dGNvbWVzIGFuZCB0aGUgdGhyZWUgdmVyZGljdHNcbiAqIGhlcmUgYXJlIHVuY2hhbmdlZDogc2lsZW5jZSBpcyBzdGlsbCBub3QgYSBza2lwLCBpdCBpcyBzaW1wbHkgZmFyIHJhcmVyLlxuICpcbiAqIEtlcHQgc2VwYXJhdGUgZnJvbSB0aGUgaW50ZWdyYXRpb24tb25seSBgdHJhbnNwb3J0LWZhY3RvcnlgIChleGNsdWRlZCBmcm9tXG4gKiB1bml0IHRlc3RzKSBzbyB0aGUgY2xhc3NpZmljYXRpb24gc3RheXMgdW5pdC10ZXN0YWJsZSBcdTIwMTQgdGhlIGZhY3RvcnkgaXRzZWxmXG4gKiBzaGVsbHMgb3V0IHRvIGBhZGJgLlxuICovXG5cbmltcG9ydCB7XG4gIGJ1aWxkQXZkTmFtZUNoYW5uZWxBcmd1bWVudHMsXG4gIGRlc2NyaWJlQWRiQ29tbWFuZCxcbiAgRklSU1RfQVZEX05BTUVfQ0hBTk5FTFxufSBmcm9tICcuL2F2ZC1uYW1lLWNoYW5uZWwuY2pzJztcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnLi90eXBlLWd1YXJkcy5janMnO1xuXG4vKipcbiAqIFdoYXQgb25lIGRldmljZSBhbnN3ZXJlZCB3aGVuIGFza2VkIHdoaWNoIEFWRCBpdCBpcyBzZXJ2aW5nLlxuICpcbiAqIGBub3QtYW4tZW11bGF0b3JgIGFuZCBgb3RoZXItYXZkYCBhcmUgYm90aCBsZWdpdGltYXRlIHNraXBzOyBvbmx5XG4gKiBgbm8tYW5zd2VyYCBpcyB0aGUgc2lsZW5jZSB0aGF0IG11c3QgbmV2ZXIgYmUgcmVhZCBhcyBvbmUuXG4gKi9cbmV4cG9ydCB0eXBlIEF2ZFByb2JlT3V0Y29tZSA9ICdtYXRjaCcgfCAnbm8tYW5zd2VyJyB8ICdub3QtYW4tZW11bGF0b3InIHwgJ290aGVyLWF2ZCc7XG5cbi8qKlxuICogVGhlIHJ1biBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSBBVkQgaXMgYWxyZWFkeSBydW5uaW5nLCBzbyBpdCBtdXN0IG5vdCBsYXVuY2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZkUHJvYmVSZWZ1c2VWZXJkaWN0IHtcbiAgLyoqXG4gIFRoZSBkZXZpY2VzIHRoYXQgY291bGQgbm90IGJlIHJlYWQsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHJ1bGVkIG91dCBhcyB0aGUgQVZEJ3MgaG9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5yZWFkYWJsZURldmljZUlkczogc3RyaW5nW107XG5cbiAgLyoqXG4gIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcmRpY3Q6ICdyZWZ1c2UnO1xufVxuXG4vKipcbiAqIE9uZSBkZXZpY2UncyBwcm9iZSBvdXRjb21lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2ZFByb2JlUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBkZXZpY2UgVURJRCwgZS5nLiBgZW11bGF0b3ItNTU1NGAuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICBXaGF0IHRoZSBkZXZpY2UgYW5zd2VyZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiBBdmRQcm9iZU91dGNvbWU7XG59XG5cbi8qKlxuICogVGhlIEFWRCBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9uIGEgZGV2aWNlIHRoaXMgcnVuIG1heSBhZG9wdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmRQcm9iZVJldXNlVmVyZGljdCB7XG4gIC8qKlxuICBUaGUgZGV2aWNlIGFscmVhZHkgc2VydmluZyB0aGUgcmVxdWVzdGVkIEFWRC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcmRpY3Q6ICdyZXVzZSc7XG59XG5cbi8qKlxuICogRXZlcnkgZGV2aWNlIGFuc3dlcmVkLCBub25lIGlzIHNlcnZpbmcgdGhlIEFWRCwgc28gbGF1bmNoaW5nIGNhbm5vdCBjb2xsaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2ZFByb2JlU3RhcnROZXdWZXJkaWN0IHtcbiAgLyoqXG4gIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcmRpY3Q6ICdzdGFydC1uZXcnO1xufVxuXG4vKipcbiAqIFdoYXQgdGhlIHJ1biBtYXkgZG8sIGdpdmVuIGV2ZXJ5IGRldmljZSdzIHByb2JlIG91dGNvbWUuXG4gKi9cbmV4cG9ydCB0eXBlIEF2ZFByb2JlVmVyZGljdCA9IEF2ZFByb2JlUmVmdXNlVmVyZGljdCB8IEF2ZFByb2JlUmV1c2VWZXJkaWN0IHwgQXZkUHJvYmVTdGFydE5ld1ZlcmRpY3Q7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkVW5yZWFkYWJsZURldmljZXNNZXNzYWdlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFVucmVhZGFibGVEZXZpY2VzTWVzc2FnZVBhcmFtcyB7XG4gIC8qKlxuICBUaGUgQVZEIHRoZSBydW4gd2FudGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYnVkZ2V0IGVhY2ggcHJvYmUgYXR0ZW1wdCB3YXMgZ2l2ZW4sIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2JlVGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG5cbiAgLyoqXG4gIFRoZSBkZXZpY2VzIHRoYXQgZGlkIG5vdCBhbnN3ZXIuXG4gICAqL1xuICByZWFkb25seSB1bnJlYWRhYmxlRGV2aWNlSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2xhc3NpZnlBdmRQcm9iZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NpZnlBdmRQcm9iZVBhcmFtcyB7XG4gIC8qKlxuICBUaGUgQVZEIHRoZSBydW4gd2FudHMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBkZXZpY2UgdGhhdCB3YXMgcHJvYmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIEFWRCBuYW1lIHRoZSBkZXZpY2UgYW5zd2VyZWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gaXQgZGlkIG5vdCBhbnN3ZXIgYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvYmVkQXZkTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNYXRjaGVzIHRoZSBkZXZpY2UgSURzIGFkYiBnaXZlcyBlbXVsYXRvcnMgc3RhcnRlZCB0aGUgd2F5IHRoaXMgaGFybmVzc1xuICogc3RhcnRzIHRoZW06IGBlbXVsYXRvciAtYXZkIDxuYW1lPmAsIHdob3NlIGNvbnNvbGUgbGFuZHMgb24gYSBsb2NhbCBwb3J0LlxuICpcbiAqIE9ubHkgc3VjaCBhIGRldmljZSBjYW4gY29sbGlkZSB3aXRoIHRoaXMgcnVuJ3MgbGF1bmNoLCBzbyBvbmx5IHN1Y2ggYSBkZXZpY2Unc1xuICogc2lsZW5jZSBpcyB3b3J0aCByZWZ1c2luZyBvdmVyLiBBIHBoeXNpY2FsIGhhbmRzZXQgKGFuIGFyYml0cmFyeSBzZXJpYWwpIG9yIGFcbiAqIFRDUC1hdHRhY2hlZCBkZXZpY2UgY2FycmllcyBubyBgcWVtdWAgQVZEIHByb3BlcnR5IGFuZCBlcnJvcnMgb24gYGFkYiBcdTIwMjYgZW11XG4gKiBhdmQgbmFtZWAgaG93ZXZlciBoZWFsdGh5IGl0IGlzOyByZWFkaW5nIGVpdGhlciBhcyBcImRpZCBub3QgYW5zd2VyXCIgd291bGRcbiAqIGJsb2NrIGV2ZXJ5IHJ1biBvbiBhIGhvc3Qgd2l0aCBhIHBob25lIHBsdWdnZWQgaW4sIHdoaWNoIGlzIGEgd29yc2UgZGVmZWN0XG4gKiB0aGFuIHRoZSBvbmUgdGhpcyBtb2R1bGUgZml4ZXMuXG4gKi9cbmNvbnN0IEVNVUxBVE9SX0RFVklDRV9JRF9QQVRURVJOID0gL15lbXVsYXRvci1cXGQrJC87XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzdW1tYXJ5IGxpbmUgbmFtaW5nIHdoYXQgZWFjaCBkZXZpY2UgYW5zd2VyZWQuXG4gKlxuICogVGhlIG9sZCBsb2cgcHJpbnRlZCBvbmx5IHRoZSBjb25jbHVzaW9uIChgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2VgKSxcbiAqIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGxpbmUgdGhhdCB3YXMgd3Jvbmc7IHByaW50aW5nIHRoZSBldmlkZW5jZSBuZXh0IHRvIGl0IGlzXG4gKiB3aGF0IG1ha2VzIGEgYmFkIGNvbmNsdXNpb24gdmlzaWJsZSB3aXRob3V0IGEgc2Vjb25kIHJ1bi5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0cyAtIEV2ZXJ5IGRldmljZSdzIHByb2JlIG91dGNvbWUuXG4gKiBAcmV0dXJucyBUaGUgc3VtbWFyeSwgb3IgYG5vIGRldmljZXNgIHdoZW4gbm90aGluZyB3YXMgY29ubmVjdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdmRQcm9iZVN1bW1hcnkocmVzdWx0czogcmVhZG9ubHkgQXZkUHJvYmVSZXN1bHRbXSk6IHN0cmluZyB7XG4gIHJldHVybiByZXN1bHRzLmxlbmd0aCA9PT0gMCA/ICdubyBkZXZpY2VzJyA6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IGAke3Jlc3VsdC5kZXZpY2VJZH09JHtyZXN1bHQub3V0Y29tZX1gKS5qb2luKCcsICcpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcmVmdXNhbCBtZXNzYWdlIGZvciBkZXZpY2VzIHRoYXQgY291bGQgbm90IGJlIHJlYWQuXG4gKlxuICogTmFtZXMgdGhlIGRldmljZSwgdGhlIEFWRCwgdGhlIGJ1ZGdldCwgdGhlIGNvbnNlcXVlbmNlIGFuZCB0aGUgcmVjb3ZlcnkgXHUyMDE0IHRoZVxuICogc2hhcGUgYHRlYXJkb3duLXZlcmRpY3QudHNgIHVzZXMgZm9yIGl0cyBvd24gd2FybmluZywgYmVjYXVzZSBhIG1lc3NhZ2UgdGhhdFxuICogc3RvcHMgYSBydW4gaGFzIHRvIGxlYXZlIHRoZSByZWFkZXIgYWJsZSB0byB1bmJsb2NrIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQVZELCB0aGUgcHJvYmUgYnVkZ2V0LCBhbmQgdGhlIGRldmljZXMgdGhhdCBkaWQgbm90IGFuc3dlci5cbiAqIEByZXR1cm5zIFRoZSByZWZ1c2FsIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVucmVhZGFibGVEZXZpY2VzTWVzc2FnZShwYXJhbXM6IEJ1aWxkVW5yZWFkYWJsZURldmljZXNNZXNzYWdlUGFyYW1zKTogc3RyaW5nIHtcbiAgLypcbiAgICogV2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZSBkZXZpY2UgdGhlIGpvaW5lZCBsaXN0IElTIGl0cyBJRCwgc28gdGhlIHNpbmd1bGFyXG4gICAqIHdvcmRpbmcgbmVlZHMgbm8gaW5kZXggYWNjZXNzIFx1MjAxNCBhbmQgbm8gdW5yZWFjaGFibGUgZmFsbGJhY2sgZm9yIG9uZS5cbiAgICovXG4gIGNvbnN0IGRldmljZUxpc3QgPSBwYXJhbXMudW5yZWFkYWJsZURldmljZUlkcy5qb2luKCcsICcpO1xuICBjb25zdCBpc1NpbmdsZSA9IHBhcmFtcy51bnJlYWRhYmxlRGV2aWNlSWRzLmxlbmd0aCA9PT0gMTtcblxuICBjb25zdCBzdWJqZWN0ID0gaXNTaW5nbGUgPyBgZGV2aWNlICR7ZGV2aWNlTGlzdH1gIDogYGRldmljZXMgJHtkZXZpY2VMaXN0fWA7XG4gIGNvbnN0IGRldmljZUxhYmVsID0gaXNTaW5nbGUgPyBkZXZpY2VMaXN0IDogJzxkZXZpY2U+JztcbiAgY29uc3QgcHJvcGVydHlDb21tYW5kID0gZGVzY3JpYmVBZGJDb21tYW5kKGJ1aWxkQXZkTmFtZUNoYW5uZWxBcmd1bWVudHMoeyBjaGFubmVsOiBGSVJTVF9BVkRfTkFNRV9DSEFOTkVMLCBkZXZpY2VJZDogZGV2aWNlTGFiZWwgfSkpO1xuICBjb25zdCBjb25zb2xlQ29tbWFuZCA9IGRlc2NyaWJlQWRiQ29tbWFuZChidWlsZEF2ZE5hbWVDaGFubmVsQXJndW1lbnRzKHsgY2hhbm5lbDogJ2NvbnNvbGUnLCBkZXZpY2VJZDogZGV2aWNlTGFiZWwgfSkpO1xuICBjb25zdCBob2xkZXIgPSBpc1NpbmdsZSA/ICdpdCBpcycgOiAnb25lIG9mIHRoZW0gaXMnO1xuICBjb25zdCBpZGVudGlmaWVkID0gaXNTaW5nbGUgPyAnaWRlbnRpZmllZCBpdHNlbGYnIDogJ2lkZW50aWZpZWQgdGhlbXNlbHZlcyc7XG4gIGNvbnN0IG93bmVyID0gaXNTaW5nbGUgPyAnQSBkZXZpY2UgdGhpcyBydW4gY2Fubm90IHJlYWQgaXMgbW9zdCBsaWtlbHkgQU5PVEhFUiBydW5cXCdzJyA6ICdEZXZpY2VzIHRoaXMgcnVuIGNhbm5vdCByZWFkIGFyZSBtb3N0IGxpa2VseSBPVEhFUiBydW5zXFwnJztcbiAgY29uc3Qga2lsbGluZyA9IGlzU2luZ2xlID8gJ2tpbGxpbmcgaXQnIDogJ2tpbGxpbmcgdGhlbSc7XG4gIGNvbnN0IG93bmVyc2hpcCA9IGlzU2luZ2xlID8gJ3RoZSBkZXZpY2UgaXMgeW91cnMnIDogJ3RoZSBkZXZpY2VzIGFyZSB5b3Vycyc7XG4gIGNvbnN0IG90aGVyUnVuID0gaXNTaW5nbGUgPyAndGhhdCBydW4nIDogJ3Rob3NlIHJ1bnMnO1xuXG4gIHJldHVybiBgQVZEIFwiJHtwYXJhbXMuYXZkTmFtZX1cIjogJHtzdWJqZWN0fSAke2lkZW50aWZpZWR9IG92ZXIgbmVpdGhlciBcXGAke3Byb3BlcnR5Q29tbWFuZH1cXGAgKHRoZSBndWVzdCBwcm9wZXJ0eSwgb3ZlciBhZGJkKSBgXG4gICAgKyBgbm9yIFxcYCR7Y29uc29sZUNvbW1hbmR9XFxgICh0aGUgZW11bGF0b3IncyBvd24gY29uc29sZSkgd2l0aGluICR7U3RyaW5nKHBhcmFtcy5wcm9iZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9bXMgZWFjaCAocmV0cmllZCBvbmNlKSwgYFxuICAgICsgYHNvIHRoaXMgcnVuIGNhbm5vdCB0ZWxsIHdoZXRoZXIgJHtob2xkZXJ9IGFscmVhZHkgc2VydmluZyB0aGF0IEFWRC4gU3RhcnRpbmcgYW4gZW11bGF0b3IgYW55d2F5IHdvdWxkIGNvbGxpZGUgYFxuICAgICsgJyhgRkFUQUwgfCBSdW5uaW5nIG11bHRpcGxlIGVtdWxhdG9ycyB3aXRoIHRoZSBzYW1lIEFWRCBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZWApLCB3aGljaCB0aGUgZW11bGF0b3IgcmVwb3J0cyBvbmx5IHRvIGl0cyBvd24gc3Rkb3V0LiAnXG4gICAgKyBgJHtvd25lcn06ICR7a2lsbGluZ30sIG9yIHJ1bm5pbmcgXFxgYWRiIGtpbGwtc2VydmVyXFxgLCBkZXN0cm95cyB3b3JrIHRoaXMgcnVuIGNhbm5vdCBzZWUsIHNvIGRvIHRoYXQgb25seSBvbmNlIHlvdSBrbm93ICR7b3duZXJzaGlwfS4gYFxuICAgICsgYE90aGVyd2lzZSB3YWl0IGZvciAke290aGVyUnVufSB0byBmaW5pc2gsIGFuZCByZXRyeSBvbmNlIFxcYGFkYiBkZXZpY2VzXFxgIG5vIGxvbmdlciBsaXN0cyBpdC5gO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hldGhlciBhIGRldmljZSBjYW4gaG9sZCBhbiBBVkQgdGhpcyBydW4gY291bGQgY29sbGlkZSB3aXRoLlxuICpcbiAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBkZXZpY2UgVURJRCB0byBqdWRnZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBmb3IgYSBsb2NhbGx5IHN0YXJ0ZWQgZW11bGF0b3IsIHdob3NlIGNvbnNvbGUgdGhpcyBydW4gY2FuIGFzay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNFbXVsYXRvckRldmljZUlkKGRldmljZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVNVUxBVE9SX0RFVklDRV9JRF9QQVRURVJOLnRlc3QoZGV2aWNlSWQpO1xufVxuXG4vKipcbiAqIENsYXNzaWZpZXMgb25lIGRldmljZSdzIHByb2JlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQVZEIHdhbnRlZCwgdGhlIGRldmljZSBwcm9iZWQsIGFuZCB3aGF0IGl0IGFuc3dlcmVkLlxuICogQHJldHVybnMgVGhlIG91dGNvbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUF2ZFByb2JlKHBhcmFtczogQ2xhc3NpZnlBdmRQcm9iZVBhcmFtcyk6IEF2ZFByb2JlT3V0Y29tZSB7XG4gIGlmICghY2hlY2tJc0VtdWxhdG9yRGV2aWNlSWQocGFyYW1zLmRldmljZUlkKSkge1xuICAgIHJldHVybiAnbm90LWFuLWVtdWxhdG9yJztcbiAgfVxuXG4gIGlmIChwYXJhbXMucHJvYmVkQXZkTmFtZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcy5wcm9iZWRBdmROYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnbm8tYW5zd2VyJztcbiAgfVxuXG4gIHJldHVybiBwYXJhbXMucHJvYmVkQXZkTmFtZSA9PT0gcGFyYW1zLmF2ZE5hbWUgPyAnbWF0Y2gnIDogJ290aGVyLWF2ZCc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGF0IHRoZSBydW4gbWF5IGRvLCBmcm9tIGV2ZXJ5IGRldmljZSdzIHByb2JlIG91dGNvbWUuXG4gKlxuICogKipBIG1hdGNoIHdpbnMgb3ZlciBhbiB1bnJlYWRhYmxlIHNpYmxpbmcuKiogT25jZSB0aGUgcmVxdWVzdGVkIEFWRCBpcyBmb3VuZFxuICogYW5kIHJldXNhYmxlLCBhbiB1bnJlbGF0ZWQgd2VkZ2VkIGRldmljZSBpcyBzb21lYm9keSBlbHNlJ3MgcHJvYmxlbSBhbmQgbXVzdFxuICogbm90IGJsb2NrIGEgcnVuIHRoYXQgaGFzIGV2ZXJ5dGhpbmcgaXQgbmVlZHMgXHUyMDE0IHRoZSBzYW1lIHJlc3RyYWludFxuICogYGVtdWxhdG9yLWJhY2tlbmQudHNgIHNob3dzIGluIG5ldmVyIHN3ZWVwaW5nIGEgYHFlbXUqYCBpdCBkb2VzIG5vdCBvd24uIE9ubHlcbiAqIHdoZW4gbm90aGluZyBtYXRjaGVkIGRvZXMgc2lsZW5jZSBiZWNvbWUgZGVjaXNpdmUsIGJlY2F1c2Ugb25seSB0aGVuIHdvdWxkIHRoZVxuICogcnVuIGdvIG9uIHRvIGxhdW5jaC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0cyAtIEV2ZXJ5IGRldmljZSdzIHByb2JlIG91dGNvbWUuXG4gKiBAcmV0dXJucyBUaGUgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBdmRQcm9iZVZlcmRpY3QocmVzdWx0czogcmVhZG9ubHkgQXZkUHJvYmVSZXN1bHRbXSk6IEF2ZFByb2JlVmVyZGljdCB7XG4gIGNvbnN0IHVucmVhZGFibGVEZXZpY2VJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgIHN3aXRjaCAocmVzdWx0Lm91dGNvbWUpIHtcbiAgICAgIGNhc2UgJ21hdGNoJzoge1xuICAgICAgICByZXR1cm4geyBkZXZpY2VJZDogcmVzdWx0LmRldmljZUlkLCB2ZXJkaWN0OiAncmV1c2UnIH07XG4gICAgICB9XG4gICAgICBjYXNlICduby1hbnN3ZXInOiB7XG4gICAgICAgIHVucmVhZGFibGVEZXZpY2VJZHMucHVzaChyZXN1bHQuZGV2aWNlSWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ25vdC1hbi1lbXVsYXRvcic6XG4gICAgICBjYXNlICdvdGhlci1hdmQnOiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocmVzdWx0Lm91dGNvbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnJlYWRhYmxlRGV2aWNlSWRzLmxlbmd0aCA+IDAgPyB7IHVucmVhZGFibGVEZXZpY2VJZHMsIHZlcmRpY3Q6ICdyZWZ1c2UnIH0gOiB7IHZlcmRpY3Q6ICdzdGFydC1uZXcnIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Q0EsOEJBSU87QUFDUCx5QkFBNEI7QUF5SDVCLE1BQU0sNkJBQTZCO0FBWTVCLFNBQVMscUJBQXFCLFNBQTRDO0FBQy9FLFNBQU8sUUFBUSxXQUFXLElBQUksZUFBZSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxRQUFRLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFDeEg7QUFZTyxTQUFTLDhCQUE4QixRQUFxRDtBQUtqRyxRQUFNLGFBQWEsT0FBTyxvQkFBb0IsS0FBSyxJQUFJO0FBQ3ZELFFBQU0sV0FBVyxPQUFPLG9CQUFvQixXQUFXO0FBRXZELFFBQU0sVUFBVSxXQUFXLFVBQVUsVUFBVSxLQUFLLFdBQVcsVUFBVTtBQUN6RSxRQUFNLGNBQWMsV0FBVyxhQUFhO0FBQzVDLFFBQU0sc0JBQWtCLGdEQUFtQixzREFBNkIsRUFBRSxTQUFTLGdEQUF3QixVQUFVLFlBQVksQ0FBQyxDQUFDO0FBQ25JLFFBQU0scUJBQWlCLGdEQUFtQixzREFBNkIsRUFBRSxTQUFTLFdBQVcsVUFBVSxZQUFZLENBQUMsQ0FBQztBQUNySCxRQUFNLFNBQVMsV0FBVyxVQUFVO0FBQ3BDLFFBQU0sYUFBYSxXQUFXLHNCQUFzQjtBQUNwRCxRQUFNLFFBQVEsV0FBVywrREFBZ0U7QUFDekYsUUFBTSxVQUFVLFdBQVcsZUFBZTtBQUMxQyxRQUFNLFlBQVksV0FBVyx3QkFBd0I7QUFDckQsUUFBTSxXQUFXLFdBQVcsYUFBYTtBQUV6QyxTQUFPLFFBQVEsT0FBTyxPQUFPLE1BQU0sT0FBTyxJQUFJLFVBQVUsbUJBQW1CLGVBQWUsNENBQzdFLGNBQWMsMENBQTBDLE9BQU8sT0FBTywwQkFBMEIsQ0FBQywyREFDdkUsTUFBTSxrTkFFdEMsS0FBSyxLQUFLLE9BQU8sc0dBQXNHLFNBQVMsd0JBQzdHLFFBQVE7QUFDcEM7QUFRTyxTQUFTLHdCQUF3QixVQUEyQjtBQUNqRSxTQUFPLDJCQUEyQixLQUFLLFFBQVE7QUFDakQ7QUFRTyxTQUFTLGlCQUFpQixRQUFpRDtBQUNoRixNQUFJLENBQUMsd0JBQXdCLE9BQU8sUUFBUSxHQUFHO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLGtCQUFrQixVQUFhLE9BQU8sY0FBYyxXQUFXLEdBQUc7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE9BQU8sa0JBQWtCLE9BQU8sVUFBVSxVQUFVO0FBQzdEO0FBZU8sU0FBUyx1QkFBdUIsU0FBcUQ7QUFDMUYsUUFBTSxzQkFBZ0MsQ0FBQztBQUV2QyxhQUFXLFVBQVUsU0FBUztBQUM1QixZQUFRLE9BQU8sU0FBUztBQUFBLE1BQ3RCLEtBQUssU0FBUztBQUNaLGVBQU8sRUFBRSxVQUFVLE9BQU8sVUFBVSxTQUFTLFFBQVE7QUFBQSxNQUN2RDtBQUFBLE1BQ0EsS0FBSyxhQUFhO0FBQ2hCLDRCQUFvQixLQUFLLE9BQU8sUUFBUTtBQUN4QztBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLEtBQUssYUFBYTtBQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFNBQVM7QUFDUCxtQkFBTyxnQ0FBWSxPQUFPLE9BQU87QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTyxvQkFBb0IsU0FBUyxJQUFJLEVBQUUscUJBQXFCLFNBQVMsU0FBUyxJQUFJLEVBQUUsU0FBUyxZQUFZO0FBQzlHOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -26,6 +26,13 @@
|
|
|
26
26
|
* to answer it — a wedged emulator times out every `adb` call — which is the
|
|
27
27
|
* condition under which a colliding launch does the most damage.
|
|
28
28
|
*
|
|
29
|
+
* **What the probe ASKS moved since; what it decides did not.** The question
|
|
30
|
+
* now travels the guest property over `adbd` first and the emulator console only
|
|
31
|
+
* as a fallback (`avd-name-channel.ts`), because keying a machine-wide refusal
|
|
32
|
+
* on the console alone let one wedged emulator — usually another project's —
|
|
33
|
+
* stop every Android run on the host. The four outcomes and the three verdicts
|
|
34
|
+
* here are unchanged: silence is still not a skip, it is simply far rarer.
|
|
35
|
+
*
|
|
29
36
|
* Kept separate from the integration-only `transport-factory` (excluded from
|
|
30
37
|
* unit tests) so the classification stays unit-testable — the factory itself
|
|
31
38
|
* shells out to `adb`.
|
|
@@ -39,4 +39,4 @@ async function captureDeviceScreenshot(params) {
|
|
|
39
39
|
0 && (module.exports = {
|
|
40
40
|
captureDeviceScreenshot
|
|
41
41
|
});
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zY3JlZW5zaG90LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUGhvdG9ncmFwaHMgdGhlIERFVklDRSwgbm90IHRoZSB3ZWIgcGFnZS5cbiAqXG4gKiBgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdGAgZ29lcyB0aHJvdWdoIEFwcGl1bSBpbiB0aGUgV2ViVmlldyBjb250ZXh0LCBzbyBvblxuICogQW5kcm9pZCBpdCBjYXB0dXJlcyB0aGUgcGFnZTogbm8gc3RhdHVzIGJhciwgYW5kIFx1MjAxNCB0aGUgcmVhc29uIHRoaXMgZXhpc3RzIFx1MjAxNFxuICogbm8gc29mdCBrZXlib2FyZCwgYmVjYXVzZSB0aGUgSU1FIGlzIGEgc3lzdGVtIHdpbmRvdyBhbmQgbm90IHBhcnQgb2YgdGhlXG4gKiBwYWdlLiBBIGZyYW1lIHRoYXQgaXMgbWVhbnQgdG8gc2hvdyB3aGF0IGEgcGhvbmUgbG9va3MgbGlrZSB0aGVyZWZvcmUgY2Fubm90XG4gKiBiZSB0YWtlbiB0aGF0IHdheS5cbiAqXG4gKiBgYWRiIGV4ZWMtb3V0IHNjcmVlbmNhcCAtcGAgcmVhZHMgdGhlIGZyYW1lYnVmZmVyIGluc3RlYWQsIHdoaWNoIGlzIHRoZSBzYW1lXG4gKiByb3V0ZSB0aGUgdHJ1c3RlZC1pbnB1dCBwYXNzZXMgYWxyZWFkeSB1c2UuIFRoZSB0cmFkZSBpcyBkZWxpYmVyYXRlIGFuZCB3b3J0aFxuICogd3JpdGluZyBkb3duIGF0IGV2ZXJ5IGNhbGwgc2l0ZTogYSBkZXZpY2UgY2FwdHVyZSBjYXJyaWVzIHRoZSBzdGF0dXMtYmFyIGNsb2NrXG4gKiBhbmQgYmF0dGVyeSwgc28gaXQgaXMgKipub3QgYnl0ZS1yZXByb2R1Y2libGUgYXMgY2FwdHVyZWQqKiB0aGUgd2F5IGEgcGFnZVxuICogY2FwdHVyZSBpcy4gYHBhaW50T3V0U3RhdHVzQmFyYCBpcyB3aGF0IG1ha2VzIG9uZSBcdTIwMTQgaXQgcmVtb3ZlcyB0aGUgYmFuZCB0aG9zZVxuICogbGl2ZSBpbiBcdTIwMTQgYW5kIGEgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgaGFzIHRvIGdvIHRocm91Z2ggaXQuXG4gKiBSZWFjaCBmb3IgdGhpcyBvbmx5IGZvciB0aGUgc2hvdHMgdGhhdCBuZWVkIHRoZSBrZXlib2FyZDsgbGVhdmUgdGhlIHJlc3Qgb25cbiAqIGBjYXB0dXJlT2JzaWRpYW5TY3JlZW5zaG90YC5cbiAqL1xuXG5pbXBvcnQgeyBydW5BZGJCaW5hcnkgfSBmcm9tICcuL2FkYi5janMnO1xuaW1wb3J0IHsgaXNQbmcgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBwaG90b2dyYXBoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAoc2hlbGxzIG91dCB0byBhIHJlYWwgZGV2aWNlKSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBDYXB0dXJlcyB0aGUgZGV2aWNlJ3MgZnJhbWVidWZmZXIgYXMgYSBQTkcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgdG8gcGhvdG9ncmFwaC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJhdyBQTkcgYnl0ZXMuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHdoYXQgY2FtZSBiYWNrIGlzIG5vdCBhIFBORyBcdTIwMTQgd2hpY2ggaXMgd2hhdCBhIHRydW5jYXRlZCBvciB0ZXh0LWRlY29kZWQgY2FwdHVyZSBsb29rc1xuICogICBsaWtlLCBhbmQgaXMgZmFyIGNoZWFwZXIgdG8gY2F0Y2ggaGVyZSB0aGFuIGluIGFuIGltYWdlIGRpZmYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdChwYXJhbXM6IENhcHR1cmVEZXZpY2VTY3JlZW5zaG90UGFyYW1zKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IGJ5dGVzID0gYXdhaXQgcnVuQWRiQmluYXJ5KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBbJ2V4ZWMtb3V0JywgJ3NjcmVlbmNhcCcsICctcCddLFxuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgfSk7XG5cbiAgaWYgKCFpc1BuZyhieXRlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgY2FwdHVyZURldmljZVNjcmVlbnNob3Q6ICR7cGFyYW1zLmRldmljZUlkfSByZXR1cm5lZCAke1N0cmluZyhieXRlcy5sZW5ndGgpfSBieXRlcyB0aGF0IGFyZSBub3QgYSBQTkcuIGBcbiAgICAgICAgKyAnQSBkZXZpY2UgdGhhdCBpcyBzdGlsbCBib290aW5nLCBvciBhbiBhZGIgdHJhbnNwb3J0IHRoYXQgZGVjb2RlZCB0aGUgc3RyZWFtIGFzIHRleHQsIGJvdGggbG9vayBsaWtlIHRoaXMuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBLGlCQUE2QjtBQUM3QixnQ0FBc0I7QUFzQnRCLGVBQXNCLHdCQUF3QixRQUE0RDtBQUN4RyxRQUFNLFFBQVEsVUFBTSx5QkFBYTtBQUFBLElBQy9CLGtCQUFrQixDQUFDLFlBQVksYUFBYSxJQUFJO0FBQUEsSUFDaEQsVUFBVSxPQUFPO0FBQUEsRUFDbkIsQ0FBQztBQUVELE1BQUksS0FBQyxpQ0FBTSxLQUFLLEdBQUc7QUFDakIsVUFBTSxJQUFJO0FBQUEsTUFDUiw0QkFBNEIsT0FBTyxRQUFRLGFBQWEsT0FBTyxNQUFNLE1BQU0sQ0FBQztBQUFBLElBRTlFO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
* `adb exec-out screencap -p` reads the framebuffer instead, which is the same
|
|
13
13
|
* route the trusted-input passes already use. The trade is deliberate and worth
|
|
14
14
|
* writing down at every call site: a device capture carries the status-bar clock
|
|
15
|
-
* and battery, so it is **not byte-reproducible** the way a page
|
|
15
|
+
* and battery, so it is **not byte-reproducible as captured** the way a page
|
|
16
|
+
* capture is. `paintOutStatusBar` is what makes one — it removes the band those
|
|
17
|
+
* live in — and a frame that is going to be committed has to go through it.
|
|
16
18
|
* Reach for this only for the shots that need the keyboard; leave the rest on
|
|
17
19
|
* `captureObsidianScreenshot`.
|
|
18
20
|
*/
|
|
@@ -18,15 +18,33 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var emulator_backend_exports = {};
|
|
20
20
|
__export(emulator_backend_exports, {
|
|
21
|
+
buildEmulatorProcessQueries: () => buildEmulatorProcessQueries,
|
|
22
|
+
checkIsNoMatchReported: () => checkIsNoMatchReported,
|
|
23
|
+
parseEmulatorProcessQueryOutput: () => parseEmulatorProcessQueryOutput,
|
|
21
24
|
parsePosixProcessList: () => parsePosixProcessList,
|
|
22
25
|
parseWindowsTaskList: () => parseWindowsTaskList,
|
|
23
26
|
selectEmulatorBackendPids: () => selectEmulatorBackendPids
|
|
24
27
|
});
|
|
25
28
|
module.exports = __toCommonJS(emulator_backend_exports);
|
|
26
29
|
const EMULATOR_BACKEND_NAME_PATTERN = /^(?:emulator|emulator64-[\w.-]+|qemu-system-[\w.-]+)$/;
|
|
30
|
+
const EMULATOR_IMAGE_NAME_PREFIXES = ["emulator", "qemu-system"];
|
|
31
|
+
const TASK_LIST_NO_MATCH_NOTICE_PATTERN = /^INFO: /m;
|
|
27
32
|
const EXECUTABLE_SUFFIX_PATTERN = /\.exe$/;
|
|
28
33
|
const RADIX_DECIMAL = 10;
|
|
29
34
|
const TASK_LIST_FIELDS_READ = 2;
|
|
35
|
+
function buildEmulatorProcessQueries(platform) {
|
|
36
|
+
return platform === "win32" ? EMULATOR_IMAGE_NAME_PREFIXES.map((prefix) => ({
|
|
37
|
+
command: "tasklist",
|
|
38
|
+
commandArguments: ["/FO", "CSV", "/NH", "/FI", `IMAGENAME eq ${prefix}*`],
|
|
39
|
+
isFiltered: true
|
|
40
|
+
})) : [{ command: "ps", commandArguments: ["-eo", "pid=,comm="], isFiltered: false }];
|
|
41
|
+
}
|
|
42
|
+
function checkIsNoMatchReported(params) {
|
|
43
|
+
return params.query.isFiltered && TASK_LIST_NO_MATCH_NOTICE_PATTERN.test(params.output);
|
|
44
|
+
}
|
|
45
|
+
function parseEmulatorProcessQueryOutput(params) {
|
|
46
|
+
return params.query.command === "tasklist" ? parseWindowsTaskList(params.output) : parsePosixProcessList(params.output);
|
|
47
|
+
}
|
|
30
48
|
function parsePosixProcessList(processListOutput) {
|
|
31
49
|
const entries = [];
|
|
32
50
|
for (const rawLine of processListOutput.split("\n")) {
|
|
@@ -64,8 +82,11 @@ function checkIsEmulatorBackendName(name) {
|
|
|
64
82
|
}
|
|
65
83
|
// Annotate the CommonJS export names for ESM import in node:
|
|
66
84
|
0 && (module.exports = {
|
|
85
|
+
buildEmulatorProcessQueries,
|
|
86
|
+
checkIsNoMatchReported,
|
|
87
|
+
parseEmulatorProcessQueryOutput,
|
|
67
88
|
parsePosixProcessList,
|
|
68
89
|
parseWindowsTaskList,
|
|
69
90
|
selectEmulatorBackendPids
|
|
70
91
|
});
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWJhY2tlbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGZpbmRpbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IgcHJvY2VzcyB0aGF0ICoqb3V0bGl2ZXMgdGhlIHBpZFxuICogdGhlIGhhcm5lc3Mga2lsbGVkKiouXG4gKlxuICogVW5kZXIgYC1uby13aW5kb3dgIHRoZSBlbXVsYXRvcidzIGJhY2tlbmQgcHJvY2VzcyBpc1xuICogYHFlbXUtc3lzdGVtLXg4Nl82NC1oZWFkbGVzc2AgKGBxZW11LXN5c3RlbS14ODZfNjRgIHdoZW4gd2luZG93ZWQpLCBub3QgdGhlXG4gKiBgZW11bGF0b3JgIGxhdW5jaGVyIHRoZSBoYXJuZXNzIHNwYXduZWQgYW5kIGhvbGRzIGEgYENoaWxkUHJvY2Vzc2AgZm9yLiBUaGVcbiAqIGxhdW5jaGVyIGV4aXRzIG9yIGlzIGtpbGxlZCwgYW5kIHRoZSBiYWNrZW5kIGlzIHdoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIEFWRCdzXG4gKiBgbXVsdGlpbnN0YW5jZS5sb2NrYCBhbmQgdGhlIGNvbnNvbGUvYWRiIHBvcnRzIFx1MjAxNCBzbyBgdGFza2tpbGwgL0YgL1RgIGFnYWluc3RcbiAqIHRoZSBsYXVuY2hlcidzIHBpZCByZXBvcnRzIHN1Y2Nlc3Mgd2hpbGUgdGhlIGVtdWxhdG9yIGtlZXBzIHJ1bm5pbmcuIEV2ZXJ5XG4gKiBsYXRlciBydW4gYWdhaW5zdCB0aGF0IEFWRCB0aGVuIGRpZXMgd2l0aCBgUnVubmluZyBtdWx0aXBsZSBlbXVsYXRvcnMgd2l0aCB0aGVcbiAqIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlYCwgd2hpY2ggbmV2ZXIgcmVhY2hlcyB0aGUgdXNlciBiZWNhdXNlIHRoZVxuICogZW11bGF0b3Igd3JpdGVzIGl0IHRvIGl0cyBvd24gc3Rkb3V0LlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgb2J2aW91cyBmaWx0ZXIgXHUyMDE0IGAtTmFtZSBxZW11LXN5c3RlbS14ODZfNjRgIC8gbWF0Y2hpbmcgdGhhdFxuICogZXhhY3QgaW1hZ2UgbmFtZSBcdTIwMTQgZG9lcyAqKm5vdCoqIG1hdGNoIHRoZSBgLWhlYWRsZXNzYCBidWlsZCwgd2hpY2ggaXMgaG93IHRoZVxuICogbGVmdG92ZXIgc3RheXMgaW52aXNpYmxlIHRocm91Z2ggc2V2ZXJhbCByb3VuZHMgb2YgXCJubyBlbXVsYXRvciBpcyBydW5uaW5nXCIuXG4gKlxuICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgYSAqKnByZS1sYXVuY2ggc25hcHNob3QqKjogYSBiYWNrZW5kIGFscmVhZHkgcnVubmluZ1xuICogYmVmb3JlIHRoaXMgcnVuIHN0YXJ0ZWQgaXRzIG93biBiZWxvbmdzIHRvIHNvbWVib2R5IGVsc2UgKGFub3RoZXIgQVZELCBvciBvbmVcbiAqIHRoZSB1c2VyIGJvb3RlZCBieSBoYW5kKSBhbmQgaXMgbmV2ZXIgdG91Y2hlZC4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZVxuICogaW50ZWdyYXRpb24tb25seSBgdHJhbnNwb3J0LWZhY3RvcnlgIHNvIHRoZSBwYXJzaW5nIGFuZCB0aGUgc2VsZWN0aW9uIHN0YXlcbiAqIHVuaXQtdGVzdGFibGUuXG4gKi9cblxuLyoqXG4gKiBPbmUgcHJvY2VzcyBmcm9tIGEgaG9zdCBwcm9jZXNzIGxpc3RpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0xpc3RFbnRyeSB7XG4gIC8qKlxuICBUaGUgcHJvY2Vzcy9pbWFnZSBuYW1lLCBhcyB0aGUgcGxhdGZvcm0ncyBsaXN0aW5nIHJlcG9ydHMgaXQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBwcm9jZXNzIElELlxuICAgKi9cbiAgcmVhZG9ubHkgcGlkOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHNQYXJhbXMge1xuICAvKipcbiAgRW11bGF0b3IgYmFja2VuZCBQSURzIHNlZW4gKipiZWZvcmUqKiB0aGlzIHJ1biBsYXVuY2hlZCBpdHMgZW11bGF0b3IsIHdoaWNoIGl0IHRoZXJlZm9yZSBkb2VzIG5vdCBvd24uXG4gICAqL1xuICByZWFkb25seSBrbm93blBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICBUaGUgaG9zdCdzIGN1cnJlbnQgcHJvY2VzcyBsaXN0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvY2Vzc2VzOiByZWFkb25seSBQcm9jZXNzTGlzdEVudHJ5W107XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgZW11bGF0b3IgbGF1bmNoZXIgYW5kIGJvdGggUUVNVSBiYWNrZW5kIGJ1aWxkcyBcdTIwMTQgY3J1Y2lhbGx5XG4gKiBpbmNsdWRpbmcgdGhlIGAtaGVhZGxlc3NgIHN1ZmZpeCBgLW5vLXdpbmRvd2AgcnVucyBwcm9kdWNlLlxuICovXG5jb25zdCBFTVVMQVRPUl9CQUNLRU5EX05BTUVfUEFUVEVSTiA9IC9eKD86ZW11bGF0b3J8ZW11bGF0b3I2NC1bXFx3Li1dK3xxZW11LXN5c3RlbS1bXFx3Li1dKykkLztcbmNvbnN0IEVYRUNVVEFCTEVfU1VGRklYX1BBVFRFUk4gPSAvXFwuZXhlJC87XG5jb25zdCBSQURJWF9ERUNJTUFMID0gMTA7XG4vKipcbiAqIE9ubHkgdGhlIGltYWdlIG5hbWUgYW5kIHRoZSBQSUQgYXJlIHJlYWQsIHNvIHRoZSBzcGxpdCBzdG9wcyBhZnRlciB0aGVtLlxuICovXG5jb25zdCBUQVNLX0xJU1RfRklFTERTX1JFQUQgPSAyO1xuXG4vKipcbiAqIFBhcnNlcyBgcHMgLWVvIHBpZD0sY29tbT1gIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gcHJvY2Vzc0xpc3RPdXRwdXQgLSBSYXcgc3Rkb3V0IG9mIHRoZSBgcHNgIGxpc3RpbmcuXG4gKiBAcmV0dXJucyBPbmUgZW50cnkgcGVyIHBhcnNhYmxlIHJvdywgaW4gbGlzdGVkIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQb3NpeFByb2Nlc3NMaXN0KHByb2Nlc3NMaXN0T3V0cHV0OiBzdHJpbmcpOiBQcm9jZXNzTGlzdEVudHJ5W10ge1xuICBjb25zdCBlbnRyaWVzOiBQcm9jZXNzTGlzdEVudHJ5W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhd0xpbmUgb2YgcHJvY2Vzc0xpc3RPdXRwdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gbGluZS5pbmRleE9mKCcgJyk7XG4gICAgaWYgKHNlcGFyYXRvckluZGV4ID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGlkID0gTnVtYmVyLnBhcnNlSW50KGxpbmUuc2xpY2UoMCwgc2VwYXJhdG9ySW5kZXgpLCBSQURJWF9ERUNJTUFMKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBpZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGVudHJpZXMucHVzaCh7IG5hbWU6IGxpbmUuc2xpY2Uoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltKCksIHBpZCB9KTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG4vKipcbiAqIFBhcnNlcyBgdGFza2xpc3QgL0ZPIENTViAvTkhgIG91dHB1dC5cbiAqXG4gKiBPbmx5IHRoZSBmaXJzdCB0d28gZmllbGRzIGFyZSByZWFkIFx1MjAxNCB0aGUgaW1hZ2UgbmFtZSBhbmQgdGhlIFBJRCBcdTIwMTQgc28gdGhlXG4gKiBtZW1vcnkgY29sdW1uJ3Mgb3duIGNvbW1hcyBjYW5ub3QgY29uZnVzZSB0aGUgc3BsaXQuXG4gKlxuICogQHBhcmFtIHRhc2tMaXN0T3V0cHV0IC0gUmF3IHN0ZG91dCBvZiB0aGUgYHRhc2tsaXN0YCBsaXN0aW5nLlxuICogQHJldHVybnMgT25lIGVudHJ5IHBlciBwYXJzYWJsZSByb3csIGluIGxpc3RlZCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlV2luZG93c1Rhc2tMaXN0KHRhc2tMaXN0T3V0cHV0OiBzdHJpbmcpOiBQcm9jZXNzTGlzdEVudHJ5W10ge1xuICBjb25zdCBlbnRyaWVzOiBQcm9jZXNzTGlzdEVudHJ5W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhd0xpbmUgb2YgdGFza0xpc3RPdXRwdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgW3Jhd05hbWUgPSAnJywgcmF3UGlkID0gJyddID0gcmF3TGluZS50cmltKCkucmVwbGFjZUFsbCgnXCInLCAnJykuc3BsaXQoJywnLCBUQVNLX0xJU1RfRklFTERTX1JFQUQpO1xuICAgIGNvbnN0IHBpZCA9IE51bWJlci5wYXJzZUludChyYXdQaWQsIFJBRElYX0RFQ0lNQUwpO1xuICAgIGlmIChyYXdOYW1lLmxlbmd0aCA9PT0gMCB8fCBOdW1iZXIuaXNOYU4ocGlkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZW50cmllcy5wdXNoKHsgbmFtZTogcmF3TmFtZSwgcGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgZW11bGF0b3IgcHJvY2Vzc2VzIHRoaXMgcnVuIGlzIHJlc3BvbnNpYmxlIGZvciBraWxsaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY3VycmVudCBsaXN0aW5nIHBsdXMgdGhlIFBJRHMgdGhhdCBwcmVkYXRlIHRoaXMgcnVuJ3MgZW11bGF0b3IuXG4gKiBAcmV0dXJucyBUaGUgUElEcyBvZiBlbXVsYXRvciBwcm9jZXNzZXMgdGhpcyBydW4gb3ducywgaW4gbGlzdGVkIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RW11bGF0b3JCYWNrZW5kUGlkcyhwYXJhbXM6IFNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHNQYXJhbXMpOiBudW1iZXJbXSB7XG4gIHJldHVybiBwYXJhbXMucHJvY2Vzc2VzXG4gICAgLmZpbHRlcigoZW50cnkpID0+IGNoZWNrSXNFbXVsYXRvckJhY2tlbmROYW1lKGVudHJ5Lm5hbWUpICYmICFwYXJhbXMua25vd25QaWRzLmluY2x1ZGVzKGVudHJ5LnBpZCkpXG4gICAgLm1hcCgoZW50cnkpID0+IGVudHJ5LnBpZCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNFbXVsYXRvckJhY2tlbmROYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBiYXNlTmFtZSA9IG5hbWUuc2xpY2UoTWF0aC5tYXgobmFtZS5sYXN0SW5kZXhPZignLycpLCBuYW1lLmxhc3RJbmRleE9mKCdcXFxcJykpICsgMSk7XG4gIHJldHVybiBFTVVMQVRPUl9CQUNLRU5EX05BTUVfUEFUVEVSTi50ZXN0KGJhc2VOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZShFWEVDVVRBQkxFX1NVRkZJWF9QQVRURVJOLCAnJykpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2REEsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSw0QkFBNEI7QUFDbEMsTUFBTSxnQkFBZ0I7QUFJdEIsTUFBTSx3QkFBd0I7QUFRdkIsU0FBUyxzQkFBc0IsbUJBQStDO0FBQ25GLFFBQU0sVUFBOEIsQ0FBQztBQUVyQyxhQUFXLFdBQVcsa0JBQWtCLE1BQU0sSUFBSSxHQUFHO0FBQ25ELFVBQU0sT0FBTyxRQUFRLEtBQUs7QUFDMUIsVUFBTSxpQkFBaUIsS0FBSyxRQUFRLEdBQUc7QUFDdkMsUUFBSSxtQkFBbUIsSUFBSTtBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE1BQU0sT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFHLGNBQWMsR0FBRyxhQUFhO0FBQ3hFLFFBQUksT0FBTyxNQUFNLEdBQUcsR0FBRztBQUNyQjtBQUFBLElBQ0Y7QUFFQSxZQUFRLEtBQUssRUFBRSxNQUFNLEtBQUssTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxFQUNuRTtBQUVBLFNBQU87QUFDVDtBQVdPLFNBQVMscUJBQXFCLGdCQUE0QztBQUMvRSxRQUFNLFVBQThCLENBQUM7QUFFckMsYUFBVyxXQUFXLGVBQWUsTUFBTSxJQUFJLEdBQUc7QUFDaEQsVUFBTSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsSUFBSSxRQUFRLEtBQUssRUFBRSxXQUFXLEtBQUssRUFBRSxFQUFFLE1BQU0sS0FBSyxxQkFBcUI7QUFDdkcsVUFBTSxNQUFNLE9BQU8sU0FBUyxRQUFRLGFBQWE7QUFDakQsUUFBSSxRQUFRLFdBQVcsS0FBSyxPQUFPLE1BQU0sR0FBRyxHQUFHO0FBQzdDO0FBQUEsSUFDRjtBQUVBLFlBQVEsS0FBSyxFQUFFLE1BQU0sU0FBUyxJQUFJLENBQUM7QUFBQSxFQUNyQztBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsMEJBQTBCLFFBQW1EO0FBQzNGLFNBQU8sT0FBTyxVQUNYLE9BQU8sQ0FBQyxVQUFVLDJCQUEyQixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sVUFBVSxTQUFTLE1BQU0sR0FBRyxDQUFDLEVBQ2pHLElBQUksQ0FBQyxVQUFVLE1BQU0sR0FBRztBQUM3QjtBQUVBLFNBQVMsMkJBQTJCLE1BQXVCO0FBQ3pELFFBQU0sV0FBVyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssWUFBWSxHQUFHLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkYsU0FBTyw4QkFBOEIsS0FBSyxTQUFTLFlBQVksRUFBRSxRQUFRLDJCQUEyQixFQUFFLENBQUM7QUFDekc7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWJhY2tlbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGZpbmRpbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IgcHJvY2VzcyB0aGF0ICoqb3V0bGl2ZXMgdGhlIHBpZFxuICogdGhlIGhhcm5lc3Mga2lsbGVkKiouXG4gKlxuICogVW5kZXIgYC1uby13aW5kb3dgIHRoZSBlbXVsYXRvcidzIGJhY2tlbmQgcHJvY2VzcyBpc1xuICogYHFlbXUtc3lzdGVtLXg4Nl82NC1oZWFkbGVzc2AgKGBxZW11LXN5c3RlbS14ODZfNjRgIHdoZW4gd2luZG93ZWQpLCBub3QgdGhlXG4gKiBgZW11bGF0b3JgIGxhdW5jaGVyIHRoZSBoYXJuZXNzIHNwYXduZWQgYW5kIGhvbGRzIGEgYENoaWxkUHJvY2Vzc2AgZm9yLiBUaGVcbiAqIGxhdW5jaGVyIGV4aXRzIG9yIGlzIGtpbGxlZCwgYW5kIHRoZSBiYWNrZW5kIGlzIHdoYXQgYWN0dWFsbHkgaG9sZHMgdGhlIEFWRCdzXG4gKiBgbXVsdGlpbnN0YW5jZS5sb2NrYCBhbmQgdGhlIGNvbnNvbGUvYWRiIHBvcnRzIFx1MjAxNCBzbyBgdGFza2tpbGwgL0YgL1RgIGFnYWluc3RcbiAqIHRoZSBsYXVuY2hlcidzIHBpZCByZXBvcnRzIHN1Y2Nlc3Mgd2hpbGUgdGhlIGVtdWxhdG9yIGtlZXBzIHJ1bm5pbmcuIEV2ZXJ5XG4gKiBsYXRlciBydW4gYWdhaW5zdCB0aGF0IEFWRCB0aGVuIGRpZXMgd2l0aCBgUnVubmluZyBtdWx0aXBsZSBlbXVsYXRvcnMgd2l0aCB0aGVcbiAqIHNhbWUgQVZEIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlYCwgd2hpY2ggbmV2ZXIgcmVhY2hlcyB0aGUgdXNlciBiZWNhdXNlIHRoZVxuICogZW11bGF0b3Igd3JpdGVzIGl0IHRvIGl0cyBvd24gc3Rkb3V0LlxuICpcbiAqIE5vdGUgdGhhdCB0aGUgb2J2aW91cyBmaWx0ZXIgXHUyMDE0IGAtTmFtZSBxZW11LXN5c3RlbS14ODZfNjRgIC8gbWF0Y2hpbmcgdGhhdFxuICogZXhhY3QgaW1hZ2UgbmFtZSBcdTIwMTQgZG9lcyAqKm5vdCoqIG1hdGNoIHRoZSBgLWhlYWRsZXNzYCBidWlsZCwgd2hpY2ggaXMgaG93IHRoZVxuICogbGVmdG92ZXIgc3RheXMgaW52aXNpYmxlIHRocm91Z2ggc2V2ZXJhbCByb3VuZHMgb2YgXCJubyBlbXVsYXRvciBpcyBydW5uaW5nXCIuXG4gKlxuICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgYSAqKnByZS1sYXVuY2ggc25hcHNob3QqKjogYSBiYWNrZW5kIGFscmVhZHkgcnVubmluZ1xuICogYmVmb3JlIHRoaXMgcnVuIHN0YXJ0ZWQgaXRzIG93biBiZWxvbmdzIHRvIHNvbWVib2R5IGVsc2UgKGFub3RoZXIgQVZELCBvciBvbmVcbiAqIHRoZSB1c2VyIGJvb3RlZCBieSBoYW5kKSBhbmQgaXMgbmV2ZXIgdG91Y2hlZC4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZVxuICogaW50ZWdyYXRpb24tb25seSBgdHJhbnNwb3J0LWZhY3RvcnlgIHNvIHRoZSBwYXJzaW5nIGFuZCB0aGUgc2VsZWN0aW9uIHN0YXlcbiAqIHVuaXQtdGVzdGFibGUuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2hlY2tJc05vTWF0Y2hSZXBvcnRlZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tJc05vTWF0Y2hSZXBvcnRlZFBhcmFtcyB7XG4gIC8qKlxuICBUaGUgcXVlcnkncyBzdGRvdXQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHF1ZXJ5IHRoYXQgcHJvZHVjZWQgaXQuXG4gICAqL1xuICByZWFkb25seSBxdWVyeTogRW11bGF0b3JQcm9jZXNzUXVlcnk7XG59XG5cbi8qKlxuICogT25lIGNvbW1hbmQgdGhhdCBsaXN0cyAoc29tZSBvZikgdGhlIGhvc3QncyBlbXVsYXRvciBwcm9jZXNzZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW11bGF0b3JQcm9jZXNzUXVlcnkge1xuICAvKipcbiAgVGhlIGV4ZWN1dGFibGUuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gIEl0cyBhcmd1bWVudHMuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kQXJndW1lbnRzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgV2hldGhlciB0aGUgY29tbWFuZCBhc2tzIG9ubHkgZm9yIGVtdWxhdG9yIGltYWdlIG5hbWVzIHJhdGhlciB0aGFuIGZvciBldmVyeSBwcm9jZXNzIG9uIHRoZSBob3N0IFx1MjAxNCB3aGljaCBpcyB3aGF0IG1ha2VzIGFuIGVtcHR5IGFuc3dlciBsZWdpdGltYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNGaWx0ZXJlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGFyc2VFbXVsYXRvclByb2Nlc3NRdWVyeU91dHB1dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VFbXVsYXRvclByb2Nlc3NRdWVyeU91dHB1dFBhcmFtcyB7XG4gIC8qKlxuICBUaGUgcXVlcnkncyBzdGRvdXQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHF1ZXJ5IHRoYXQgcHJvZHVjZWQgaXQuXG4gICAqL1xuICByZWFkb25seSBxdWVyeTogRW11bGF0b3JQcm9jZXNzUXVlcnk7XG59XG5cbi8qKlxuICogT25lIHByb2Nlc3MgZnJvbSBhIGhvc3QgcHJvY2VzcyBsaXN0aW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NMaXN0RW50cnkge1xuICAvKipcbiAgVGhlIHByb2Nlc3MvaW1hZ2UgbmFtZSwgYXMgdGhlIHBsYXRmb3JtJ3MgbGlzdGluZyByZXBvcnRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcHJvY2VzcyBJRC5cbiAgICovXG4gIHJlYWRvbmx5IHBpZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzZWxlY3RFbXVsYXRvckJhY2tlbmRQaWRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RFbXVsYXRvckJhY2tlbmRQaWRzUGFyYW1zIHtcbiAgLyoqXG4gIEVtdWxhdG9yIGJhY2tlbmQgUElEcyBzZWVuICoqYmVmb3JlKiogdGhpcyBydW4gbGF1bmNoZWQgaXRzIGVtdWxhdG9yLCB3aGljaCBpdCB0aGVyZWZvcmUgZG9lcyBub3Qgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkga25vd25QaWRzOiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgVGhlIGhvc3QncyBjdXJyZW50IHByb2Nlc3MgbGlzdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2Nlc3NlczogcmVhZG9ubHkgUHJvY2Vzc0xpc3RFbnRyeVtdO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgdGhlIGVtdWxhdG9yIGxhdW5jaGVyIGFuZCBib3RoIFFFTVUgYmFja2VuZCBidWlsZHMgXHUyMDE0IGNydWNpYWxseVxuICogaW5jbHVkaW5nIHRoZSBgLWhlYWRsZXNzYCBzdWZmaXggYC1uby13aW5kb3dgIHJ1bnMgcHJvZHVjZS5cbiAqL1xuY29uc3QgRU1VTEFUT1JfQkFDS0VORF9OQU1FX1BBVFRFUk4gPSAvXig/OmVtdWxhdG9yfGVtdWxhdG9yNjQtW1xcdy4tXSt8cWVtdS1zeXN0ZW0tW1xcdy4tXSspJC87XG4vKipcbiAqIFRoZSBpbWFnZS1uYW1lIHByZWZpeGVzIGB0YXNrbGlzdGAgaXMgYXNrZWQgZm9yIFx1MjAxNCBldmVyeSBuYW1lXG4gKiBgRU1VTEFUT1JfQkFDS0VORF9OQU1FX1BBVFRFUk5gIGFjY2VwdHMgc3RhcnRzIHdpdGggb25lIG9mIHRoZW0uXG4gKlxuICogT25lIGNhbGwgcGVyIHByZWZpeCwgYmVjYXVzZSBgdGFza2xpc3RgJ3MgYC9GSWAgY2xhdXNlcyBhcmUgQU5EZWQ6IHRoZXJlIGlzXG4gKiBubyB3YXkgdG8gT1IgdHdvIGltYWdlIG5hbWVzIGluIGEgc2luZ2xlIGNhbGwuXG4gKi9cbmNvbnN0IEVNVUxBVE9SX0lNQUdFX05BTUVfUFJFRklYRVMgPSBbJ2VtdWxhdG9yJywgJ3FlbXUtc3lzdGVtJ10gYXMgY29uc3Q7XG5cbi8qKlxuICogVGhlIG5vdGljZSBgdGFza2xpc3RgIHByaW50cyBvbiBzdGRvdXQsIHdpdGggZXhpdCAwLCB3aGVuIGEgZmlsdGVyIG1hdGNoZWRcbiAqIG5vdGhpbmc6IGBJTkZPOiBObyB0YXNrcyBhcmUgcnVubmluZyB3aGljaCBtYXRjaCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLmBcbiAqIE9ubHkgdGhlIGBJTkZPOmAgcHJlZml4IGlzIG1hdGNoZWQ7IGEgbG9jYWxpemVkIFdpbmRvd3MgdGhhdCB3b3JkcyBpdFxuICogZGlmZmVyZW50bHkgcmVhZHMgYXMgYSBzaWxlbnQgZW1wdHkgYW5zd2VyLCB3aGljaCBpcyByZXBvcnRlZCBhcyBhIGZhaWxlZFxuICogcXVlcnkgXHUyMDE0IHRoZSBzYWZlIGRpcmVjdGlvbiwgc2luY2UgYSBmYWlsZWQgcXVlcnkga2lsbHMgbm90aGluZy5cbiAqL1xuY29uc3QgVEFTS19MSVNUX05PX01BVENIX05PVElDRV9QQVRURVJOID0gL15JTkZPOiAvbTtcbmNvbnN0IEVYRUNVVEFCTEVfU1VGRklYX1BBVFRFUk4gPSAvXFwuZXhlJC87XG5jb25zdCBSQURJWF9ERUNJTUFMID0gMTA7XG4vKipcbiAqIE9ubHkgdGhlIGltYWdlIG5hbWUgYW5kIHRoZSBQSUQgYXJlIHJlYWQsIHNvIHRoZSBzcGxpdCBzdG9wcyBhZnRlciB0aGVtLlxuICovXG5jb25zdCBUQVNLX0xJU1RfRklFTERTX1JFQUQgPSAyO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZHMgdGhhdCBsaXN0IHRoZSBob3N0J3MgZW11bGF0b3IgcHJvY2Vzc2VzLlxuICpcbiAqICoqT24gV2luZG93cyB0aGUgcXVlcnkgaXMgZmlsdGVyZWQgdG8gdGhlIGVtdWxhdG9yIGltYWdlIG5hbWVzLCBhbmQgdGhhdCBpcyBhXG4gKiBtZWFzdXJlZCBkZWNpc2lvbi4qKiBBIHdob2xlLWhvc3QgYHRhc2tsaXN0YCBkb2VzIHBlci1wcm9jZXNzIHdvcmsgZm9yIGV2ZXJ5XG4gKiByb3csIHNvIGl0IHBheXMgdGhlIGhvc3QncyBjb250ZW50aW9uIG9uY2UgcGVyIHByb2Nlc3M6IGR1cmluZyBhbiBlbXVsYXRvclxuICogYm9vdCBpdCBtZWFzdXJlZCBwNTAgMi45cyBhbmQgbWF4IDkyLjJzIG92ZXIgfjUzMCByb3dzLCBhbmQgd2l0aCBldmVyeSBjb3JlXG4gKiBzYXR1cmF0ZWQgb25lIGNhbGwgc3RhbGxlZCBmb3IgMTIwLjlzIFx1MjAxNCB1bnRpbCB0aGUgbG9hZCBleGl0ZWQgXHUyMDE0IHdoZXJlIHRoZVxuICogZmlsdGVyZWQgY2FsbCBuZXZlciBleGNlZWRlZCA1MDVtcyAoMjAyNi0wOS0yMywgbj04IGVhY2gpLiBUaGUgcGVyLXJvdyBjb3N0IGlzXG4gKiB3b3JrIHRoZSBmaWx0ZXIgc2tpcHMsIHNvIHRoZSBmaWx0ZXJlZCBxdWVyeSBkb2VzIG5vdCBpbmhlcml0IGl0LlxuICpcbiAqICoqT24gUE9TSVggdGhlIHdob2xlLWhvc3QgYHBzYCBpcyBrZXB0LioqIEl0IHJlYWRzIGAvcHJvY2AgYW5kIHdhcyBuZXZlclxuICogbWVhc3VyZWQgc2xvdywgYW5kIGEgd2hvbGUtaG9zdCBsaXN0aW5nIGtlZXBzIHRoZSBpbnZhcmlhbnQgdGhhdCB6ZXJvIHJvd3NcbiAqIG1lYW5zIGEgZmFpbGVkIHF1ZXJ5IFx1MjAxNCB3aGljaCBgcGdyZXBgJ3MgZXhpdCAxIG9uIG5vIG1hdGNoIHdvdWxkIG11ZGR5LlxuICpcbiAqIEBwYXJhbSBwbGF0Zm9ybSAtIFRoZSBob3N0IHBsYXRmb3JtLCBlLmcuIGBwcm9jZXNzLnBsYXRmb3JtYC5cbiAqIEByZXR1cm5zIFRoZSBxdWVyaWVzIHRvIHJ1bjsgdGhlaXIgcGFyc2VkIHJvd3MgdG9nZXRoZXIgYXJlIHRoZSBhbnN3ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtdWxhdG9yUHJvY2Vzc1F1ZXJpZXMocGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSk6IEVtdWxhdG9yUHJvY2Vzc1F1ZXJ5W10ge1xuICByZXR1cm4gcGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICA/IEVNVUxBVE9SX0lNQUdFX05BTUVfUFJFRklYRVMubWFwKChwcmVmaXgpID0+ICh7XG4gICAgICBjb21tYW5kOiAndGFza2xpc3QnLFxuICAgICAgY29tbWFuZEFyZ3VtZW50czogWycvRk8nLCAnQ1NWJywgJy9OSCcsICcvRkknLCBgSU1BR0VOQU1FIGVxICR7cHJlZml4fSpgXSxcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWVcbiAgICB9KSlcbiAgICA6IFt7IGNvbW1hbmQ6ICdwcycsIGNvbW1hbmRBcmd1bWVudHM6IFsnLWVvJywgJ3BpZD0sY29tbT0nXSwgaXNGaWx0ZXJlZDogZmFsc2UgfV07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBxdWVyeSBhZmZpcm1hdGl2ZWx5IHJlcG9ydGVkIHRoYXQgbm90aGluZyBtYXRjaGVkLlxuICpcbiAqIE9ubHkgYSAqKmZpbHRlcmVkKiogcXVlcnkgY2FuIHNheSB0aGF0OiBhIHdob2xlLWhvc3QgbGlzdGluZyBhbHdheXMgaGFzIHJvd3MsXG4gKiBzbyBhbiBlbXB0eSBvbmUgaXMgbmV2ZXIgYW4gYW5zd2VyLiBBIGZpbHRlcmVkIHF1ZXJ5IHRoYXQgcHJpbnRlZCBub3RoaW5nIGF0XG4gKiBhbGwgaXMgbm90IGFuIGFuc3dlciBlaXRoZXIgXHUyMDE0IHNpbGVuY2UgYW5kIFwibm8gZW11bGF0b3IgaXMgcnVubmluZ1wiIG11c3Qgc3RheVxuICogZGlzdGluZ3Vpc2hhYmxlLCBvciBhIGZhaWxlZCBxdWVyeSByZWFkcyBhcyBhIGhvc3Qgd2l0aCBubyBlbXVsYXRvciBvbiBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHF1ZXJ5IGFuZCBpdHMgc3Rkb3V0LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcXVlcnkncyBvdXRwdXQgY2FycmllcyBpdHMgb3duIG5vLW1hdGNoIG5vdGljZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNOb01hdGNoUmVwb3J0ZWQocGFyYW1zOiBDaGVja0lzTm9NYXRjaFJlcG9ydGVkUGFyYW1zKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJhbXMucXVlcnkuaXNGaWx0ZXJlZCAmJiBUQVNLX0xJU1RfTk9fTUFUQ0hfTk9USUNFX1BBVFRFUk4udGVzdChwYXJhbXMub3V0cHV0KTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG91dHB1dCBvZiBvbmUgb2Yge0BsaW5rIGJ1aWxkRW11bGF0b3JQcm9jZXNzUXVlcmllc30nIGNvbW1hbmRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgYW5kIGl0cyBzdGRvdXQuXG4gKiBAcmV0dXJucyBPbmUgZW50cnkgcGVyIHBhcnNhYmxlIHJvdywgaW4gbGlzdGVkIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbXVsYXRvclByb2Nlc3NRdWVyeU91dHB1dChwYXJhbXM6IFBhcnNlRW11bGF0b3JQcm9jZXNzUXVlcnlPdXRwdXRQYXJhbXMpOiBQcm9jZXNzTGlzdEVudHJ5W10ge1xuICByZXR1cm4gcGFyYW1zLnF1ZXJ5LmNvbW1hbmQgPT09ICd0YXNrbGlzdCcgPyBwYXJzZVdpbmRvd3NUYXNrTGlzdChwYXJhbXMub3V0cHV0KSA6IHBhcnNlUG9zaXhQcm9jZXNzTGlzdChwYXJhbXMub3V0cHV0KTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYHBzIC1lbyBwaWQ9LGNvbW09YCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHByb2Nlc3NMaXN0T3V0cHV0IC0gUmF3IHN0ZG91dCBvZiB0aGUgYHBzYCBsaXN0aW5nLlxuICogQHJldHVybnMgT25lIGVudHJ5IHBlciBwYXJzYWJsZSByb3csIGluIGxpc3RlZCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zaXhQcm9jZXNzTGlzdChwcm9jZXNzTGlzdE91dHB1dDogc3RyaW5nKTogUHJvY2Vzc0xpc3RFbnRyeVtdIHtcbiAgY29uc3QgZW50cmllczogUHJvY2Vzc0xpc3RFbnRyeVtdID0gW107XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIHByb2Nlc3NMaXN0T3V0cHV0LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IGxpbmUgPSByYXdMaW5lLnRyaW0oKTtcbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IGxpbmUuaW5kZXhPZignICcpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBpZCA9IE51bWJlci5wYXJzZUludChsaW5lLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KSwgUkFESVhfREVDSU1BTCk7XG4gICAgaWYgKE51bWJlci5pc05hTihwaWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBlbnRyaWVzLnB1c2goeyBuYW1lOiBsaW5lLnNsaWNlKHNlcGFyYXRvckluZGV4ICsgMSkudHJpbSgpLCBwaWQgfSk7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn1cblxuLyoqXG4gKiBQYXJzZXMgYHRhc2tsaXN0IC9GTyBDU1YgL05IYCBvdXRwdXQuXG4gKlxuICogT25seSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgcmVhZCBcdTIwMTQgdGhlIGltYWdlIG5hbWUgYW5kIHRoZSBQSUQgXHUyMDE0IHNvIHRoZVxuICogbWVtb3J5IGNvbHVtbidzIG93biBjb21tYXMgY2Fubm90IGNvbmZ1c2UgdGhlIHNwbGl0LlxuICpcbiAqIEBwYXJhbSB0YXNrTGlzdE91dHB1dCAtIFJhdyBzdGRvdXQgb2YgdGhlIGB0YXNrbGlzdGAgbGlzdGluZy5cbiAqIEByZXR1cm5zIE9uZSBlbnRyeSBwZXIgcGFyc2FibGUgcm93LCBpbiBsaXN0ZWQgb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVdpbmRvd3NUYXNrTGlzdCh0YXNrTGlzdE91dHB1dDogc3RyaW5nKTogUHJvY2Vzc0xpc3RFbnRyeVtdIHtcbiAgY29uc3QgZW50cmllczogUHJvY2Vzc0xpc3RFbnRyeVtdID0gW107XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIHRhc2tMaXN0T3V0cHV0LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IFtyYXdOYW1lID0gJycsIHJhd1BpZCA9ICcnXSA9IHJhd0xpbmUudHJpbSgpLnJlcGxhY2VBbGwoJ1wiJywgJycpLnNwbGl0KCcsJywgVEFTS19MSVNUX0ZJRUxEU19SRUFEKTtcbiAgICBjb25zdCBwaWQgPSBOdW1iZXIucGFyc2VJbnQocmF3UGlkLCBSQURJWF9ERUNJTUFMKTtcbiAgICBpZiAocmF3TmFtZS5sZW5ndGggPT09IDAgfHwgTnVtYmVyLmlzTmFOKHBpZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGVudHJpZXMucHVzaCh7IG5hbWU6IHJhd05hbWUsIHBpZCB9KTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGlzIHJ1biBpcyByZXNwb25zaWJsZSBmb3Iga2lsbGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGN1cnJlbnQgbGlzdGluZyBwbHVzIHRoZSBQSURzIHRoYXQgcHJlZGF0ZSB0aGlzIHJ1bidzIGVtdWxhdG9yLlxuICogQHJldHVybnMgVGhlIFBJRHMgb2YgZW11bGF0b3IgcHJvY2Vzc2VzIHRoaXMgcnVuIG93bnMsIGluIGxpc3RlZCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHMocGFyYW1zOiBTZWxlY3RFbXVsYXRvckJhY2tlbmRQaWRzUGFyYW1zKTogbnVtYmVyW10ge1xuICByZXR1cm4gcGFyYW1zLnByb2Nlc3Nlc1xuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBjaGVja0lzRW11bGF0b3JCYWNrZW5kTmFtZShlbnRyeS5uYW1lKSAmJiAhcGFyYW1zLmtub3duUGlkcy5pbmNsdWRlcyhlbnRyeS5waWQpKVxuICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5waWQpO1xufVxuXG5mdW5jdGlvbiBjaGVja0lzRW11bGF0b3JCYWNrZW5kTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKE1hdGgubWF4KG5hbWUubGFzdEluZGV4T2YoJy8nKSwgbmFtZS5sYXN0SW5kZXhPZignXFxcXCcpKSArIDEpO1xuICByZXR1cm4gRU1VTEFUT1JfQkFDS0VORF9OQU1FX1BBVFRFUk4udGVzdChiYXNlTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoRVhFQ1VUQUJMRV9TVUZGSVhfUEFUVEVSTiwgJycpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0dBLE1BQU0sZ0NBQWdDO0FBUXRDLE1BQU0sK0JBQStCLENBQUMsWUFBWSxhQUFhO0FBUy9ELE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sZ0JBQWdCO0FBSXRCLE1BQU0sd0JBQXdCO0FBb0J2QixTQUFTLDRCQUE0QixVQUFtRDtBQUM3RixTQUFPLGFBQWEsVUFDaEIsNkJBQTZCLElBQUksQ0FBQyxZQUFZO0FBQUEsSUFDOUMsU0FBUztBQUFBLElBQ1Qsa0JBQWtCLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxnQkFBZ0IsTUFBTSxHQUFHO0FBQUEsSUFDeEUsWUFBWTtBQUFBLEVBQ2QsRUFBRSxJQUNBLENBQUMsRUFBRSxTQUFTLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxZQUFZLEdBQUcsWUFBWSxNQUFNLENBQUM7QUFDcEY7QUFhTyxTQUFTLHVCQUF1QixRQUErQztBQUNwRixTQUFPLE9BQU8sTUFBTSxjQUFjLGtDQUFrQyxLQUFLLE9BQU8sTUFBTTtBQUN4RjtBQVFPLFNBQVMsZ0NBQWdDLFFBQW1FO0FBQ2pILFNBQU8sT0FBTyxNQUFNLFlBQVksYUFBYSxxQkFBcUIsT0FBTyxNQUFNLElBQUksc0JBQXNCLE9BQU8sTUFBTTtBQUN4SDtBQVFPLFNBQVMsc0JBQXNCLG1CQUErQztBQUNuRixRQUFNLFVBQThCLENBQUM7QUFFckMsYUFBVyxXQUFXLGtCQUFrQixNQUFNLElBQUksR0FBRztBQUNuRCxVQUFNLE9BQU8sUUFBUSxLQUFLO0FBQzFCLFVBQU0saUJBQWlCLEtBQUssUUFBUSxHQUFHO0FBQ3ZDLFFBQUksbUJBQW1CLElBQUk7QUFDekI7QUFBQSxJQUNGO0FBRUEsVUFBTSxNQUFNLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxjQUFjLEdBQUcsYUFBYTtBQUN4RSxRQUFJLE9BQU8sTUFBTSxHQUFHLEdBQUc7QUFDckI7QUFBQSxJQUNGO0FBRUEsWUFBUSxLQUFLLEVBQUUsTUFBTSxLQUFLLE1BQU0saUJBQWlCLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsRUFDbkU7QUFFQSxTQUFPO0FBQ1Q7QUFXTyxTQUFTLHFCQUFxQixnQkFBNEM7QUFDL0UsUUFBTSxVQUE4QixDQUFDO0FBRXJDLGFBQVcsV0FBVyxlQUFlLE1BQU0sSUFBSSxHQUFHO0FBQ2hELFVBQU0sQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLElBQUksUUFBUSxLQUFLLEVBQUUsV0FBVyxLQUFLLEVBQUUsRUFBRSxNQUFNLEtBQUsscUJBQXFCO0FBQ3ZHLFVBQU0sTUFBTSxPQUFPLFNBQVMsUUFBUSxhQUFhO0FBQ2pELFFBQUksUUFBUSxXQUFXLEtBQUssT0FBTyxNQUFNLEdBQUcsR0FBRztBQUM3QztBQUFBLElBQ0Y7QUFFQSxZQUFRLEtBQUssRUFBRSxNQUFNLFNBQVMsSUFBSSxDQUFDO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLDBCQUEwQixRQUFtRDtBQUMzRixTQUFPLE9BQU8sVUFDWCxPQUFPLENBQUMsVUFBVSwyQkFBMkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLFVBQVUsU0FBUyxNQUFNLEdBQUcsQ0FBQyxFQUNqRyxJQUFJLENBQUMsVUFBVSxNQUFNLEdBQUc7QUFDN0I7QUFFQSxTQUFTLDJCQUEyQixNQUF1QjtBQUN6RCxRQUFNLFdBQVcsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLFlBQVksR0FBRyxHQUFHLEtBQUssWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZGLFNBQU8sOEJBQThCLEtBQUssU0FBUyxZQUFZLEVBQUUsUUFBUSwyQkFBMkIsRUFBRSxDQUFDO0FBQ3pHOyIsCiAgIm5hbWVzIjogW10KfQo=
|