obsidian-integration-testing 14.1.0 → 16.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/README.md +2 -0
- package/dist/lib/cjs/appium-dependencies.cjs +2 -5
- package/dist/lib/cjs/appium-server-marker.cjs +3 -9
- package/dist/lib/cjs/asar-fallback-detection.cjs +2 -5
- package/dist/lib/cjs/avd-probe-verdict.cjs +3 -9
- package/dist/lib/cjs/capture-obsidian-screenshot.cjs +9 -1
- package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +21 -0
- package/dist/lib/cjs/capture-screenshot.cjs +2 -5
- package/dist/lib/cjs/cli.cjs +2 -5
- package/dist/lib/cjs/demo-vault-populate.cjs +7 -9
- package/dist/lib/cjs/device-setting-restore.cjs +2 -5
- package/dist/lib/cjs/electron-compatibility.cjs +8 -11
- package/dist/lib/cjs/emulator-arguments.cjs +14 -14
- package/dist/lib/cjs/emulator-marker.cjs +4 -13
- package/dist/lib/cjs/emulator-reaper.cjs +2 -5
- package/dist/lib/cjs/emulator-snapshot.cjs +3 -9
- package/dist/lib/cjs/eval-cap-exceeded-error.cjs +2 -5
- package/dist/lib/cjs/exec.cjs +12 -24
- package/dist/lib/cjs/function-expression.cjs +2 -5
- package/dist/lib/cjs/global-setup-core.cjs +53 -18
- package/dist/lib/cjs/hide-vault-name.cjs +45 -0
- package/dist/lib/cjs/hide-vault-name.d.cts +67 -0
- package/dist/lib/cjs/index.cjs +9 -1
- package/dist/lib/cjs/index.d.cts +6 -2
- package/dist/lib/cjs/installer-asset.cjs +3 -9
- package/dist/lib/cjs/installer-compatibility.cjs +9 -12
- package/dist/lib/cjs/label-screenshot.cjs +64 -5
- package/dist/lib/cjs/label-screenshot.d.cts +66 -2
- package/dist/lib/cjs/leftover-cleanup.cjs +2 -5
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +17 -31
- package/dist/lib/cjs/namespace-bootstrap.cjs +3 -9
- package/dist/lib/cjs/obsidian-executable.cjs +2 -5
- package/dist/lib/cjs/obsidian-installer.cjs +3 -9
- package/dist/lib/cjs/obsidian-instance.cjs +1 -1
- package/dist/lib/cjs/obsidian-instance.d.cts +8 -0
- package/dist/lib/cjs/owned-instance-exit-marker.cjs +2 -5
- package/dist/lib/cjs/owned-instance-exited-error.cjs +13 -17
- package/dist/lib/cjs/process-exit-message.cjs +3 -9
- package/dist/lib/cjs/renderer-boot-detection.cjs +3 -9
- package/dist/lib/cjs/setup-lock.cjs +3 -9
- package/dist/lib/cjs/sharp-loader.cjs +1 -1
- package/dist/lib/cjs/sharp-loader.d.cts +11 -0
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +4 -9
- package/dist/lib/cjs/stale-build-detection.cjs +115 -0
- package/dist/lib/cjs/stale-build-detection.d.cts +108 -0
- package/dist/lib/cjs/stale-build-error.cjs +74 -0
- package/dist/lib/cjs/stale-build-error.d.cts +81 -0
- package/dist/lib/cjs/strict-proxy.cjs +3 -9
- package/dist/lib/cjs/transport-appium.cjs +3 -9
- package/dist/lib/cjs/transport-desktop-cdp.cjs +18 -32
- package/dist/lib/cjs/transport-factory.cjs +20 -25
- package/dist/lib/cjs/transport-options.cjs +2 -5
- package/dist/lib/cjs/transport-options.d.cts +36 -0
- package/dist/lib/cjs/vault-teardown-verdict.cjs +2 -5
- package/dist/lib/cjs/version-matrix.cjs +4 -13
- package/dist/lib/cjs/wedged-appium-server.cjs +3 -9
- package/dist/lib/esm/appium-dependencies.mjs +2 -5
- package/dist/lib/esm/appium-server-marker.mjs +3 -9
- package/dist/lib/esm/asar-fallback-detection.mjs +2 -5
- package/dist/lib/esm/avd-probe-verdict.mjs +3 -9
- package/dist/lib/esm/capture-obsidian-screenshot.d.mts +21 -0
- package/dist/lib/esm/capture-obsidian-screenshot.mjs +9 -1
- package/dist/lib/esm/capture-screenshot.mjs +2 -5
- package/dist/lib/esm/cli.mjs +2 -5
- package/dist/lib/esm/demo-vault-populate.mjs +7 -9
- package/dist/lib/esm/device-setting-restore.mjs +2 -5
- package/dist/lib/esm/electron-compatibility.mjs +8 -11
- package/dist/lib/esm/emulator-arguments.mjs +14 -14
- package/dist/lib/esm/emulator-marker.mjs +4 -13
- package/dist/lib/esm/emulator-reaper.mjs +2 -5
- package/dist/lib/esm/emulator-snapshot.mjs +3 -9
- package/dist/lib/esm/eval-cap-exceeded-error.mjs +2 -5
- package/dist/lib/esm/exec.mjs +12 -24
- package/dist/lib/esm/function-expression.mjs +2 -5
- package/dist/lib/esm/global-setup-core.mjs +60 -19
- package/dist/lib/esm/hide-vault-name.d.mts +67 -0
- package/dist/lib/esm/hide-vault-name.mjs +21 -0
- package/dist/lib/esm/index.d.mts +6 -2
- package/dist/lib/esm/index.mjs +8 -2
- package/dist/lib/esm/installer-asset.mjs +3 -9
- package/dist/lib/esm/installer-compatibility.mjs +9 -12
- package/dist/lib/esm/label-screenshot.d.mts +66 -2
- package/dist/lib/esm/label-screenshot.mjs +62 -4
- package/dist/lib/esm/leftover-cleanup.mjs +2 -5
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.mjs +17 -31
- package/dist/lib/esm/namespace-bootstrap.mjs +3 -9
- package/dist/lib/esm/obsidian-executable.mjs +2 -5
- package/dist/lib/esm/obsidian-installer.mjs +3 -9
- package/dist/lib/esm/obsidian-instance.d.mts +8 -0
- package/dist/lib/esm/obsidian-instance.mjs +1 -1
- package/dist/lib/esm/owned-instance-exit-marker.mjs +2 -5
- package/dist/lib/esm/owned-instance-exited-error.mjs +13 -17
- package/dist/lib/esm/process-exit-message.mjs +3 -9
- package/dist/lib/esm/renderer-boot-detection.mjs +3 -9
- package/dist/lib/esm/setup-lock.mjs +3 -9
- package/dist/lib/esm/sharp-loader.d.mts +11 -0
- package/dist/lib/esm/sharp-loader.mjs +1 -1
- package/dist/lib/esm/soft-keyboard-geometry.mjs +4 -9
- package/dist/lib/esm/stale-build-detection.d.mts +108 -0
- package/dist/lib/esm/stale-build-detection.mjs +84 -0
- package/dist/lib/esm/stale-build-error.d.mts +81 -0
- package/dist/lib/esm/stale-build-error.mjs +50 -0
- package/dist/lib/esm/strict-proxy.mjs +3 -9
- package/dist/lib/esm/transport-appium.mjs +3 -9
- package/dist/lib/esm/transport-desktop-cdp.mjs +18 -32
- package/dist/lib/esm/transport-factory.mjs +20 -25
- package/dist/lib/esm/transport-options.d.mts +36 -0
- package/dist/lib/esm/transport-options.mjs +2 -5
- package/dist/lib/esm/vault-teardown-verdict.mjs +2 -5
- package/dist/lib/esm/version-matrix.mjs +4 -13
- package/dist/lib/esm/wedged-appium-server.mjs +3 -9
- package/package.json +20 -19
|
@@ -38,10 +38,7 @@ const HARNESS_TEMP_DIR_NAME = "obsidian-integration-testing";
|
|
|
38
38
|
const OWNED_USER_DATA_DIR_PREFIX = "userdata-";
|
|
39
39
|
const TEMP_VAULT_DIR_PREFIX = "temp-vault-";
|
|
40
40
|
function checkIsLeftoverStale(params) {
|
|
41
|
-
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
return params.nowInMilliseconds - params.modifiedAtInMilliseconds >= params.maxAgeInMilliseconds;
|
|
41
|
+
return params.maxAgeInMilliseconds === 0 || params.nowInMilliseconds - params.modifiedAtInMilliseconds >= params.maxAgeInMilliseconds;
|
|
45
42
|
}
|
|
46
43
|
function filterLeftoverNames(params) {
|
|
47
44
|
const excludedNames = params.excludedNames ?? [];
|
|
@@ -131,4 +128,4 @@ async function readDirectoryNames(path) {
|
|
|
131
128
|
sweepHostLeftovers,
|
|
132
129
|
willSweepLeftovers
|
|
133
130
|
});
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xlZnRvdmVyLWNsZWFudXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTd2VlcHMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBhIHByZXZpb3VzIGludGVncmF0aW9uIHJ1biBsZWFrZWQgXHUyMDE0IHRoZVxuICogYHRlbXAtdmF1bHQtKmAgc3RhZ2luZy92YXVsdCBkaXJlY3RvcmllcyBhbmQgdGhlIG93bmVkIGluc3RhbmNlJ3NcbiAqIGB1c2VyZGF0YS0qYCBDaHJvbWl1bSBwcm9maWxlcy5cbiAqXG4gKiBBIHJ1biB0aGF0IGRpZXMgbWlkLWZsaWdodCBjYW5ub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmOiBvbiBBbmRyb2lkIHRoZVxuICogdGVhcmRvd24gdGFsa3MgdG8gdGhlIFdlYlZpZXcsIGFuZCBhIGRlYWQgV2ViVmlldyBpcyBleGFjdGx5IHdoYXQgbW9zdFxuICogZmFpbHVyZXMgYXJlIChgVmF1bHQgY2xlYW51cCBlcnJvciAobm9uLWZhdGFsKTogbm8gc3VjaCB3aW5kb3dgKS4gRXZlcnlcbiAqIGZhaWx1cmUgdGhlcmVmb3JlIGxlYWtzIGEgdmF1bHQsIGV2ZXJ5IGxlYWtlZCB2YXVsdCBzdGF5cyByZWdpc3RlcmVkIGZvclxuICogT2JzaWRpYW4gdG8gZW51bWVyYXRlIGF0IHN0YXJ0dXAsIGFuZCB0aGF0IGVudW1lcmF0aW9uIGhhcyB0byBmaW5pc2ggaW5zaWRlXG4gKiB0aGUgV2ViVmlldy1yZWFkaW5lc3MgYnVkZ2V0IFx1MjAxNCBzbyBlYWNoIGZhaWx1cmUgbWFrZXMgdGhlIG5leHQgb25lIGxpa2VsaWVyLlxuICogU3dlZXBpbmcgZm9yZWlnbiByZXNpZHVlIGF0IHRoZSBTVEFSVCBvZiBhIHJ1biBicmVha3MgdGhhdCBsb29wLCBiZWNhdXNlIGl0XG4gKiBydW5zIGJlZm9yZSBhbnl0aGluZyB0aGF0IGNhbiBkaWUuXG4gKlxuICogVGhlIHR3byBzaWRlcyB1c2UgZGVsaWJlcmF0ZWx5IGRpZmZlcmVudCBzYWZldHkgZ2F0ZXMgKHNlZSB0aGUgcmVwbydzIEwzMSk6XG4gKlxuICogLSAqKkRldmljZSAoQW5kcm9pZCkqKiBcdTIwMTQgdW5jb25kaXRpb25hbC4gQW5kcm9pZCBydW5zIGhvbGQgdGhlIGV4Y2x1c2l2ZVxuICogICBgYW5kcm9pZGAgc2V0dXAgbG9jaywgc28gbm8gY29uY3VycmVudCBydW4gY2FuIG93biBhIGRldmljZSB2YXVsdCwgYW5kIGFuXG4gKiAgIGFnZSBnYXRlIHdvdWxkIGxldCBhIHZhdWx0IGxlYWtlZCB0ZW4gbWludXRlcyBhZ28gc3Vydml2ZSBpbnRvIHRoZSBuZXh0IHJ1bi5cbiAqIC0gKipIb3N0KiogXHUyMDE0IGFnZS1nYXRlZC4gRGVza3RvcCBydW5zIGFyZSBkZWxpYmVyYXRlbHkgKm5vdCogc2VyaWFsaXplZCAoZWFjaFxuICogICBvd25zIGFuIGlzb2xhdGVkIGluc3RhbmNlKSBhbmQgZXZlcnkgcHJvamVjdCBvbiB0aGUgbWFjaGluZSBzaGFyZXMgb25lXG4gKiAgIGB0bXBkaXIoKWAsIHNvIGEgZGlyZWN0b3J5IHlvdW5nIGVub3VnaCB0byBiZWxvbmcgdG8gYSBsaXZlIHJ1biBpcyBsZWZ0XG4gKiAgIGFsb25lLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJtLFxuICBzdGF0XG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbi8qKlxuICogRGVmYXVsdCBmb3IgdGhlIGBsZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzYCB0cmFuc3BvcnQgb3B0aW9uIFx1MjAxNCB0d28gaG91cnMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xFRlRPVkVSX01BWF9BR0VfSU5fTUlMTElTRUNPTkRTID0gN18yMDBfMDAwO1xuXG4vKipcbiAqIE5hbWUgb2YgdGhlIGhhcm5lc3MncyBvd24gZGlyZWN0b3J5IGluc2lkZSB7QGxpbmsgdG1wZGlyfSwgd2hpY2ggaG9sZHMgdGhlXG4gKiBvd25lZCBpbnN0YW5jZXMnIHVzZXItZGF0YSBkaXJlY3RvcmllcyBhbG9uZ3NpZGUgdGhlIHZlcnNpb24vaW5zdGFsbGVyIGNhY2hlc1xuICogYW5kIHRoZSBzZXR1cCBsb2Nrcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSA9ICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuLyoqXG4gKiBQcmVmaXggb2YgYW4gb3duZWQgZGVza3RvcCBpbnN0YW5jZSdzIGlzb2xhdGVkIHVzZXItZGF0YSBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBPV05FRF9VU0VSX0RBVEFfRElSX1BSRUZJWCA9ICd1c2VyZGF0YS0nO1xuXG4vKipcbiAqIFByZWZpeCBvZiBhIHRlbXBvcmFyeSB2YXVsdCBkaXJlY3RvcnksIGJvdGggb24gdGhlIGhvc3QgKHdoZXJlIGl0IGlzIGNyZWF0ZWQpXG4gKiBhbmQgb24gYW4gQW5kcm9pZCBkZXZpY2UgKHdoZXJlIGl0IGtlZXBzIGl0cyBob3N0IGJhc2VuYW1lKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFTVBfVkFVTFRfRElSX1BSRUZJWCA9ICd0ZW1wLXZhdWx0LSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNMZWZ0b3ZlclN0YWxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0lzTGVmdG92ZXJTdGFsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBIb3cgb2xkIGFuIGVudHJ5IG11c3QgYmUgdG8gY291bnQgYXMgc3RhbGUuIGAwYCBkaXNhYmxlcyB0aGUgZ2F0ZSwgbWFraW5nXG4gICAqIGV2ZXJ5IGVudHJ5IHN0YWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIGVudHJ5J3MgbW9kaWZpY2F0aW9uIHRpbWUsIGluIGVwb2NoIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgY3VycmVudCB0aW1lLCBpbiBlcG9jaCBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBub3dJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaWx0ZXJMZWZ0b3Zlck5hbWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJMZWZ0b3Zlck5hbWVzUGFyYW1zIHtcbiAgLyoqXG4gIE5hbWVzIHRvIGtlZXAgZXZlbiB3aGVuIHRoZXkgbWF0Y2ggYSBwcmVmaXggKGUuZy4gdGhlIGN1cnJlbnQgcnVuJ3Mgb3duIHZhdWx0KS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmF3IGVudHJ5IG5hbWVzLiBBY2NlcHRzIGBhZGIgc2hlbGwgbHNgIG91dHB1dCBzcGxpdCBpbnRvIGxpbmVzLCBzbyBlYWNoXG4gICAqIG5hbWUgaXMgdHJpbW1lZCAoZHJvcHBpbmcgdGhlIHRyYWlsaW5nIGBcXHJgIGFuIGBhZGJgIHNoZWxsIGFkZHMgb24gV2luZG93cylcbiAgICogYW5kIGJsYW5rIGxpbmVzIGFyZSBkcm9wcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBEaXJlY3RvcnktbmFtZSBwcmVmaXhlcyB0aGF0IG1hcmsgYW4gZW50cnkgYXMgdGhlIGhhcm5lc3MncyBvd24gcmVzaWR1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeGVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGRpcmVjdG9yeSB0aGUgaG9zdCBzd2VlcCBzY2FucywgdG9nZXRoZXIgd2l0aCB0aGUgcHJlZml4ZXMgdGhhdCBtYXJrXG4gKiByZXNpZHVlIGluc2lkZSBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWZ0b3ZlclJvb3Qge1xuICAvKipcbiAgVGhlIGFic29sdXRlIHBhdGggdG8gc2Nhbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgRGlyZWN0b3J5LW5hbWUgcHJlZml4ZXMgdGhhdCBtYXJrIGFuIGVudHJ5IGFzIHJlbW92YWJsZSByZXNpZHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4ZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzd2VlcERldmljZUxlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBEZXZpY2VMZWZ0b3ZlcnNQYXJhbXMge1xuICAvKipcbiAgICogTGlzdHMgdGhlIGVudHJ5IG5hbWVzIGRpcmVjdGx5IHVuZGVyIHRoZSB2YXVsdCBiYXNlIHBhdGguIEEgbGlzdGluZyBmYWlsdXJlXG4gICAqIG11c3QgcmVzb2x2ZSB0byBhbiBlbXB0eSBsaXN0IHJhdGhlciB0aGFuIHJlamVjdCBcdTIwMTQgYSBkZXZpY2Ugd2l0aCBubyB2YXVsdFxuICAgKiBkaXJlY3RvcnkgeWV0IGlzIHRoZSBub3JtYWwgZmlyc3QtcnVuIHN0YXRlLCBub3QgYW4gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBsaXN0TmFtZXM6ICgpID0+IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIE9ORSBkaXJlY3RvcnksIGJ5IGFic29sdXRlIGRldmljZSBwYXRoLiBNYXkgcmVqZWN0OyB0aGUgY2FsbGVyXG4gICAqIHRyZWF0cyBhIHJlamVjdGlvbiBhcyB0aGlzIGRpcmVjdG9yeSBmYWlsaW5nIGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92ZURpcmVjdG9yeTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgVGhlIGFic29sdXRlIGRldmljZSBwYXRoIHRoZSB2YXVsdHMgc2l0IHVuZGVyLCBpbmNsdWRpbmcgaXRzIHRyYWlsaW5nIHNlcGFyYXRvci5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Yge0BsaW5rIHN3ZWVwRGV2aWNlTGVmdG92ZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2VlcERldmljZUxlZnRvdmVyc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZXMgdGhhdCB3ZXJlIHN0aWxsIHByZXNlbnQgYWZ0ZXIgdGhlIHN3ZWVwLiBOYW1lZCByYXRoZXIgdGhhblxuICAgKiBjb3VudGVkLCBiZWNhdXNlIHRoZSBpbnRlcmVzdGluZyBjYXNlIGlzIGEgZGlyZWN0b3J5IHRoYXQgZmFpbHMgRVZFUlkgcnVuXG4gICAqIGFuZCBhIGNhbGxlciBjYW4gb25seSBzYXkgc28gaWYgaXQga25vd3Mgd2hpY2ggb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkTmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBIb3cgbWFueSBkaXJlY3RvcmllcyBhcmUgdmVyaWZpYWJseSBnb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHN3ZWVwSG9zdExlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBIb3N0TGVmdG92ZXJzT3B0aW9ucyB7XG4gIC8qKlxuICBOYW1lcyB0byBrZWVwIHJlZ2FyZGxlc3Mgb2YgYWdlIChlLmcuIHRoZSBjdXJyZW50IHJ1bidzIG93biBkaXJlY3RvcmllcykuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZE5hbWVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmUgaXQgaXMgcmVtb3ZlZC4gYDBgIHJlbW92ZXMgZXZlcnkgbWF0Y2guXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX0xFRlRPVkVSX01BWF9BR0VfSU5fTUlMTElTRUNPTkRTfVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlSW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSByb290cyB0byBzd2VlcC4gRGVmYXVsdHMgdG8gdGhlIHRlbXAtdmF1bHQgcm9vdCAoe0BsaW5rIHRtcGRpcn0pIGFuZCB0aGVcbiAgICogb3duZWQgdXNlci1kYXRhIHJvb3QgKGA8dG1wZGlyPi97QGxpbmsgSEFSTkVTU19URU1QX0RJUl9OQU1FfWApLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdHM/OiByZWFkb25seSBMZWZ0b3ZlclJvb3RbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Yge0BsaW5rIHN3ZWVwSG9zdExlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBIb3N0TGVmdG92ZXJzUmVzdWx0IHtcbiAgLyoqXG4gIEhvdyBtYW55IGRpcmVjdG9yaWVzIHdlcmUgc2VsZWN0ZWQgZm9yIHJlbW92YWwgYnV0IGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgSG93IG1hbnkgZGlyZWN0b3JpZXMgd2VyZSByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNSZW1vdmFibGVEaXJ9LlxuICovXG5pbnRlcmZhY2UgQ2hlY2tJc1JlbW92YWJsZURpcmVjdG9yeVBhcmFtcyB7XG4gIC8qKlxuICBIb3cgb2xkIHRoZSBlbnRyeSBtdXN0IGJlIHRvIGJlIHJlbW92ZWQgKGAwYCBkaXNhYmxlcyB0aGUgZ2F0ZSkuXG4gICAqL1xuICByZWFkb25seSBtYXhBZ2VJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgc3dlZXAncyByZWZlcmVuY2UgdGltZSwgaW4gZXBvY2ggbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbm93SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hldGhlciBhIGxlZnRvdmVyIGVudHJ5IGlzIG9sZCBlbm91Z2ggdG8gYmUgcmVtb3ZlZC5cbiAqXG4gKiBUaGUgZ2F0ZSBleGlzdHMgYmVjYXVzZSBldmVyeSBwcm9qZWN0IG9uIHRoZSBtYWNoaW5lIHNoYXJlcyBvbmUgYHRtcGRpcigpYFxuICogYW5kIGRlc2t0b3AgcnVucyBhcmUgbm90IHNlcmlhbGl6ZWQsIHNvIGEgeW91bmcgZGlyZWN0b3J5IG1heSB3ZWxsIGJlbG9uZyB0b1xuICogYSBydW4gdGhhdCBpcyBzdGlsbCBpbiBmbGlnaHQuIEFuIGVudHJ5IHdob3NlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIGluIHRoZVxuICogZnV0dXJlIChhIGNsb2NrIHNrZXcpIGlzIHRyZWF0ZWQgYXMgbGl2ZSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgYWdlIGNvbXBhcmlzb24gaW5wdXRzLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGVudHJ5IG1heSBiZSByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc0xlZnRvdmVyU3RhbGUocGFyYW1zOiBDaGVja0lzTGVmdG92ZXJTdGFsZVBhcmFtcyk6IGJvb2xlYW4ge1xuICBpZiAocGFyYW1zLm1heEFnZUluTWlsbGlzZWNvbmRzID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLm5vd0luTWlsbGlzZWNvbmRzIC0gcGFyYW1zLm1vZGlmaWVkQXRJbk1pbGxpc2Vjb25kcyA+PSBwYXJhbXMubWF4QWdlSW5NaWxsaXNlY29uZHM7XG59XG5cbi8qKlxuICogU2VsZWN0cyB0aGUgZW50cnkgbmFtZXMgdGhhdCBhcmUgdGhlIGhhcm5lc3MncyBvd24gcmVzaWR1ZS5cbiAqXG4gKiBOYW1lLW9ubHksIHNvIHRoZSBjYWxsZXIgY2FuIGZpbHRlciBhIGxhcmdlIGRpcmVjdG9yeSBsaXN0aW5nIGJlZm9yZSBwYXlpbmdcbiAqIGZvciBhIGBzdGF0YCBwZXIgZW50cnksIGFuZCBzbyB0aGUgQW5kcm9pZCBzd2VlcCBjYW4gZmVlZCBpdCByYXdcbiAqIGBhZGIgc2hlbGwgbHNgIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG5hbWVzLCBwcmVmaXhlcywgYW5kIGV4Y2x1c2lvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hpbmcgbmFtZXMsIHRyaW1tZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJMZWZ0b3Zlck5hbWVzKHBhcmFtczogRmlsdGVyTGVmdG92ZXJOYW1lc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXhjbHVkZWROYW1lcyA9IHBhcmFtcy5leGNsdWRlZE5hbWVzID8/IFtdO1xuICByZXR1cm4gcGFyYW1zLm5hbWVzXG4gICAgLm1hcCgobmFtZSkgPT4gbmFtZS50cmltKCkpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gcGFyYW1zLnByZWZpeGVzLnNvbWUoKHByZWZpeCkgPT4gbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlZE5hbWVzLmluY2x1ZGVzKG5hbWUpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbGVmdG92ZXIgYWdlIGdhdGUsIGFwcGx5aW5nIHRoZSBkZWZhdWx0IHdoZW4gdGhlIG9wdGlvbiBpc1xuICogb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBtYXggYWdlIGluIG1pbGxpc2Vjb25kcyAoYDBgIGRpc2FibGVzIHRoZSBnYXRlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzKG9wdGlvbnM6IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBvcHRpb25zPy5sZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfTEVGVE9WRVJfTUFYX0FHRV9JTl9NSUxMSVNFQ09ORFM7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGVmdG92ZXIgdmF1bHQgZGlyZWN0b3JpZXMgYSBkZXZpY2UgaXMgY2FycnlpbmcsIG9uZSBkaXJlY3RvcnkgYXRcbiAqIGEgdGltZSwgYW5kIHJlcG9ydHMgd2hhdCBpcyB2ZXJpZmlhYmx5IGdvbmUuXG4gKlxuICogKipPbmUgZGlyZWN0b3J5IHBlciByZW1vdmFsLCBhbmQgYSBmYWlsdXJlIGlzIG5vbi1mYXRhbC4qKiBSZW1vdmluZyB0aGUgd2hvbGVcbiAqIHNldCBpbiBhIHNpbmdsZSBgcm0gLXJmYCBsZXRzIG9uZSB1bi1yZW1vdmFibGUgZW50cnkgZGVjaWRlIHRoZSBmYXRlIG9mIGV2ZXJ5XG4gKiBvdGhlcjogYSBuYW1lIHRoYXQgdGhlIEZVU0UgbGF5ZXIgY2Fubm90IGV4cHJlc3MgKGFuIEFuZHJvaWQgZW11bGF0b3IgY2FuXG4gKiBwcm9kdWNlIG9uZSBcdTIwMTQgYHJtIC1yZmAsIGBmaW5kIC1kZWxldGVgIGFuZCBmb3JjZS1zdG9wcGluZyBPYnNpZGlhbiBmaXJzdCBhbGxcbiAqIGFuc3dlciBgT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRgKSBpcyBwZXJtYW5lbnQsIHNvIGEgc3dlZXAgdGhhdCBnaXZlcyB1cCBvbiBpdFxuICogZ2l2ZXMgdXAgZm9yZXZlciwgYW5kIHRoZSByZXNpZHVlIG9ubHkgZ3Jvd3MuIFBlci1kaXJlY3RvcnksIHRoYXQgZW50cnkgY29zdHNcbiAqIG9uZSB3YXJuaW5nIHBlciBydW4gaW5zdGVhZCBvZiB0aGUgd2hvbGUgc3dlZXAuXG4gKlxuICogKipUaGUgcmVzdWx0IGlzIG1lYXN1cmVkLCBub3QgYXNzdW1lZC4qKiBUaGUgZGlyZWN0b3JpZXMgYXJlIHJlLWxpc3RlZFxuICogYWZ0ZXJ3YXJkcyBhbmQgb25seSB0aGUgb25lcyB0aGF0IGFjdHVhbGx5IGRpc2FwcGVhcmVkIGFyZSBjb3VudGVkLCBiZWNhdXNlXG4gKiB0aGUgZmFpbHVyZSB0aGlzIHdhcyB3cml0dGVuIGZvciB3YXMgYSBzd2VlcCB0aGF0IHJlcG9ydGVkIHN1Y2Nlc3Mgd2hpbGVcbiAqIGNsZWFyaW5nIG5vdGhpbmcgXHUyMDE0IGEgcmVtb3ZhbCBjb21tYW5kIGNhbiBleGl0IG5vbi16ZXJvLCBvciBwYXJ0aWFsbHkgc3VjY2VlZCxcbiAqIGFuZCBuZWl0aGVyIGlzIHZpc2libGUgZnJvbSBpdHMgZXhpdCBjb2RlIGFsb25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBIb3cgdG8gbGlzdCBhbmQgcmVtb3ZlLCBhbmQgdGhlIGJhc2UgcGF0aCB0byBzd2VlcC5cbiAqIEByZXR1cm5zIFRoZSB2ZXJpZmllZCByZW1vdmFsIGNvdW50IGFuZCB0aGUgbmFtZXMgdGhhdCBzdXJ2aXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3ZWVwRGV2aWNlTGVmdG92ZXJzKFxuICBwYXJhbXM6IFN3ZWVwRGV2aWNlTGVmdG92ZXJzUGFyYW1zXG4pOiBQcm9taXNlPFN3ZWVwRGV2aWNlTGVmdG92ZXJzUmVzdWx0PiB7XG4gIGNvbnN0IHsgbGlzdE5hbWVzLCByZW1vdmVEaXJlY3RvcnksIHZhdWx0QmFzZVBhdGggfSA9IHBhcmFtcztcblxuICBjb25zdCBuYW1lcyA9IGZpbHRlckxlZnRvdmVyTmFtZXMoeyBuYW1lczogYXdhaXQgbGlzdE5hbWVzKCksIHByZWZpeGVzOiBbVEVNUF9WQVVMVF9ESVJfUFJFRklYXSB9KTtcbiAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGZhaWxlZE5hbWVzOiBbXSwgcmVtb3ZlZENvdW50OiAwIH07XG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVtb3ZlRGlyZWN0b3J5KGAke3ZhdWx0QmFzZVBhdGh9JHtuYW1lfWApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm9uLWZhdGFsIGJ5IGRlc2lnbjogdGhlIG5leHQgZGlyZWN0b3J5IHN0aWxsIGdldHMgaXRzIGNoYW5jZS5cbiAgICB9XG4gIH1cblxuICBjb25zdCBzdXJ2aXZpbmdOYW1lcyA9IGZpbHRlckxlZnRvdmVyTmFtZXMoeyBuYW1lczogYXdhaXQgbGlzdE5hbWVzKCksIHByZWZpeGVzOiBbVEVNUF9WQVVMVF9ESVJfUFJFRklYXSB9KTtcbiAgY29uc3QgZmFpbGVkTmFtZXMgPSBuYW1lcy5maWx0ZXIoKG5hbWUpID0+IHN1cnZpdmluZ05hbWVzLmluY2x1ZGVzKG5hbWUpKTtcblxuICByZXR1cm4geyBmYWlsZWROYW1lcywgcmVtb3ZlZENvdW50OiBuYW1lcy5sZW5ndGggLSBmYWlsZWROYW1lcy5sZW5ndGggfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBob3N0LXNpZGUgZGlyZWN0b3JpZXMgbGVmdCBiZWhpbmQgYnkgZWFybGllciBydW5zLlxuICpcbiAqIEJlc3QtZWZmb3J0IHRocm91Z2hvdXQ6IGFuIHVucmVhZGFibGUgcm9vdCwgYW4gZW50cnkgdGhhdCBjYW5ub3QgYmUgYHN0YXRgZWQsXG4gKiBhbmQgYSBkaXJlY3RvcnkgdGhhdCByZWZ1c2VzIHRvIGJlIHJlbW92ZWQgKGEgbGl2ZSBwcm9jZXNzIHN0aWxsIGhvbGRpbmcgYVxuICogaGFuZGxlIGFuc3dlcnMgYEVQRVJNYCBvbiBXaW5kb3dzKSBhcmUgYWxsIHNraXBwZWQgcmF0aGVyIHRoYW4gdGhyb3duLCBzbyBhXG4gKiBzd2VlcCBjYW4gbmV2ZXIgZmFpbCB0aGUgcnVuIGl0IGlzIGNsZWFuaW5nIHVwIGZvci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBzd2VlcCBvcHRpb25zLlxuICogQHJldHVybnMgSG93IG1hbnkgZGlyZWN0b3JpZXMgd2VyZSByZW1vdmVkLCBhbmQgaG93IG1hbnkgcmVzaXN0ZWQgcmVtb3ZhbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3ZWVwSG9zdExlZnRvdmVycyhvcHRpb25zPzogU3dlZXBIb3N0TGVmdG92ZXJzT3B0aW9ucyk6IFByb21pc2U8U3dlZXBIb3N0TGVmdG92ZXJzUmVzdWx0PiB7XG4gIGNvbnN0IG1heEFnZUluTWlsbGlzZWNvbmRzID0gb3B0aW9ucz8ubWF4QWdlSW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9MRUZUT1ZFUl9NQVhfQUdFX0lOX01JTExJU0VDT05EUztcbiAgY29uc3Qgbm93SW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuICBjb25zdCByb290cyA9IG9wdGlvbnM/LnJvb3RzID8/IGdldERlZmF1bHRMZWZ0b3ZlclJvb3RzKCk7XG5cbiAgbGV0IGZhaWxlZENvdW50ID0gMDtcbiAgbGV0IHJlbW92ZWRDb3VudCA9IDA7XG5cbiAgZm9yIChjb25zdCByb290IG9mIHJvb3RzKSB7XG4gICAgY29uc3QgbmFtZXMgPSBmaWx0ZXJMZWZ0b3Zlck5hbWVzKHtcbiAgICAgIGV4Y2x1ZGVkTmFtZXM6IG9wdGlvbnM/LmV4Y2x1ZGVkTmFtZXMsXG4gICAgICBuYW1lczogYXdhaXQgcmVhZERpcmVjdG9yeU5hbWVzKHJvb3QucGF0aCksXG4gICAgICBwcmVmaXhlczogcm9vdC5wcmVmaXhlc1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICBjb25zdCBwYXRoID0gam9pbihyb290LnBhdGgsIG5hbWUpO1xuICAgICAgaWYgKCFhd2FpdCBjaGVja0lzUmVtb3ZhYmxlRGlyZWN0b3J5KHsgbWF4QWdlSW5NaWxsaXNlY29uZHMsIG5vd0luTWlsbGlzZWNvbmRzLCBwYXRoIH0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJlbW92ZWRDb3VudCsrO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGZhaWxlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZmFpbGVkQ291bnQsIHJlbW92ZWRDb3VudCB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdoZXRoZXIgbGVmdG92ZXIgZGlyZWN0b3JpZXMgYXJlIHN3ZXB0LCBhcHBseWluZyB0aGUgZGVmYXVsdCB3aGVuXG4gKiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgc3dlZXBzIHNob3VsZCBydW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aWxsU3dlZXBMZWZ0b3ZlcnMob3B0aW9uczogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRpb25zPy5zaG91bGRTd2VlcExlZnRvdmVycyA/PyB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbWF0Y2hlZCBlbnRyeSBpcyBhIGRpcmVjdG9yeSBvbGQgZW5vdWdoIHRvIHJlbW92ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVudHJ5IHBhdGggYW5kIGFnZS1nYXRlIGlucHV0cy5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBlbnRyeSBtYXkgYmUgcmVtb3ZlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tJc1JlbW92YWJsZURpcmVjdG9yeShwYXJhbXM6IENoZWNrSXNSZW1vdmFibGVEaXJlY3RvcnlQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBtYXhBZ2VJbk1pbGxpc2Vjb25kcywgbm93SW5NaWxsaXNlY29uZHMgfSA9IHBhcmFtcztcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGFyYW1zLnBhdGgpO1xuICAgIHJldHVybiBzdGF0cy5pc0RpcmVjdG9yeSgpXG4gICAgICAmJiBjaGVja0lzTGVmdG92ZXJTdGFsZSh7IG1heEFnZUluTWlsbGlzZWNvbmRzLCBtb2RpZmllZEF0SW5NaWxsaXNlY29uZHM6IHN0YXRzLm10aW1lTXMsIG5vd0luTWlsbGlzZWNvbmRzIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBWYW5pc2hlZCwgb3IgdW5yZWFkYWJsZSBcdTIwMTQgZWl0aGVyIHdheSBpdCBpcyBub3Qgb3VycyB0byByZW1vdmUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdHMgc3dlcHQgd2hlbiB0aGUgY2FsbGVyIGRvZXMgbm90IG5hbWUgaXRzIG93bi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdGVtcC12YXVsdCByb290IGFuZCB0aGUgb3duZWQgdXNlci1kYXRhIHJvb3QuXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRMZWZ0b3ZlclJvb3RzKCk6IExlZnRvdmVyUm9vdFtdIHtcbiAgcmV0dXJuIFtcbiAgICB7IHBhdGg6IHRtcGRpcigpLCBwcmVmaXhlczogW1RFTVBfVkFVTFRfRElSX1BSRUZJWF0gfSxcbiAgICB7IHBhdGg6IGpvaW4odG1wZGlyKCksIEhBUk5FU1NfVEVNUF9ESVJfTkFNRSksIHByZWZpeGVzOiBbT1dORURfVVNFUl9EQVRBX0RJUl9QUkVGSVhdIH1cbiAgXTtcbn1cblxuLyoqXG4gKiBMaXN0cyBhIGRpcmVjdG9yeSdzIGVudHJ5IG5hbWVzLCB0cmVhdGluZyBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSBhcyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIGxpc3QuXG4gKiBAcmV0dXJucyBUaGUgZW50cnkgbmFtZXMsIG9yIGFuIGVtcHR5IGxpc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWREaXJlY3RvcnlOYW1lcyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRkaXIocGF0aCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJCQSxzQkFJTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFPZCxNQUFNLDJDQUEyQztBQU9qRCxNQUFNLHdCQUF3QjtBQUs5QixNQUFNLDZCQUE2QjtBQU1uQyxNQUFNLHdCQUF3QjtBQTBLOUIsU0FBUyxxQkFBcUIsUUFBNkM7QUFDaEYsTUFBSSxPQUFPLHlCQUF5QixHQUFHO0FBQ3JDLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPLG9CQUFvQixPQUFPLDRCQUE0QixPQUFPO0FBQzlFO0FBWU8sU0FBUyxvQkFBb0IsUUFBNkM7QUFDL0UsUUFBTSxnQkFBZ0IsT0FBTyxpQkFBaUIsQ0FBQztBQUMvQyxTQUFPLE9BQU8sTUFDWCxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUN6QixPQUFPLENBQUMsU0FBUyxPQUFPLFNBQVMsS0FBSyxDQUFDLFdBQVcsS0FBSyxXQUFXLE1BQU0sQ0FBQyxDQUFDLEVBQzFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxTQUFTLElBQUksQ0FBQztBQUNuRDtBQVNPLFNBQVMsb0NBQW9D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
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xlZnRvdmVyLWNsZWFudXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTd2VlcHMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBhIHByZXZpb3VzIGludGVncmF0aW9uIHJ1biBsZWFrZWQgXHUyMDE0IHRoZVxuICogYHRlbXAtdmF1bHQtKmAgc3RhZ2luZy92YXVsdCBkaXJlY3RvcmllcyBhbmQgdGhlIG93bmVkIGluc3RhbmNlJ3NcbiAqIGB1c2VyZGF0YS0qYCBDaHJvbWl1bSBwcm9maWxlcy5cbiAqXG4gKiBBIHJ1biB0aGF0IGRpZXMgbWlkLWZsaWdodCBjYW5ub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmOiBvbiBBbmRyb2lkIHRoZVxuICogdGVhcmRvd24gdGFsa3MgdG8gdGhlIFdlYlZpZXcsIGFuZCBhIGRlYWQgV2ViVmlldyBpcyBleGFjdGx5IHdoYXQgbW9zdFxuICogZmFpbHVyZXMgYXJlIChgVmF1bHQgY2xlYW51cCBlcnJvciAobm9uLWZhdGFsKTogbm8gc3VjaCB3aW5kb3dgKS4gRXZlcnlcbiAqIGZhaWx1cmUgdGhlcmVmb3JlIGxlYWtzIGEgdmF1bHQsIGV2ZXJ5IGxlYWtlZCB2YXVsdCBzdGF5cyByZWdpc3RlcmVkIGZvclxuICogT2JzaWRpYW4gdG8gZW51bWVyYXRlIGF0IHN0YXJ0dXAsIGFuZCB0aGF0IGVudW1lcmF0aW9uIGhhcyB0byBmaW5pc2ggaW5zaWRlXG4gKiB0aGUgV2ViVmlldy1yZWFkaW5lc3MgYnVkZ2V0IFx1MjAxNCBzbyBlYWNoIGZhaWx1cmUgbWFrZXMgdGhlIG5leHQgb25lIGxpa2VsaWVyLlxuICogU3dlZXBpbmcgZm9yZWlnbiByZXNpZHVlIGF0IHRoZSBTVEFSVCBvZiBhIHJ1biBicmVha3MgdGhhdCBsb29wLCBiZWNhdXNlIGl0XG4gKiBydW5zIGJlZm9yZSBhbnl0aGluZyB0aGF0IGNhbiBkaWUuXG4gKlxuICogVGhlIHR3byBzaWRlcyB1c2UgZGVsaWJlcmF0ZWx5IGRpZmZlcmVudCBzYWZldHkgZ2F0ZXMgKHNlZSB0aGUgcmVwbydzIEwzMSk6XG4gKlxuICogLSAqKkRldmljZSAoQW5kcm9pZCkqKiBcdTIwMTQgdW5jb25kaXRpb25hbC4gQW5kcm9pZCBydW5zIGhvbGQgdGhlIGV4Y2x1c2l2ZVxuICogICBgYW5kcm9pZGAgc2V0dXAgbG9jaywgc28gbm8gY29uY3VycmVudCBydW4gY2FuIG93biBhIGRldmljZSB2YXVsdCwgYW5kIGFuXG4gKiAgIGFnZSBnYXRlIHdvdWxkIGxldCBhIHZhdWx0IGxlYWtlZCB0ZW4gbWludXRlcyBhZ28gc3Vydml2ZSBpbnRvIHRoZSBuZXh0IHJ1bi5cbiAqIC0gKipIb3N0KiogXHUyMDE0IGFnZS1nYXRlZC4gRGVza3RvcCBydW5zIGFyZSBkZWxpYmVyYXRlbHkgKm5vdCogc2VyaWFsaXplZCAoZWFjaFxuICogICBvd25zIGFuIGlzb2xhdGVkIGluc3RhbmNlKSBhbmQgZXZlcnkgcHJvamVjdCBvbiB0aGUgbWFjaGluZSBzaGFyZXMgb25lXG4gKiAgIGB0bXBkaXIoKWAsIHNvIGEgZGlyZWN0b3J5IHlvdW5nIGVub3VnaCB0byBiZWxvbmcgdG8gYSBsaXZlIHJ1biBpcyBsZWZ0XG4gKiAgIGFsb25lLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJtLFxuICBzdGF0XG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbi8qKlxuICogRGVmYXVsdCBmb3IgdGhlIGBsZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzYCB0cmFuc3BvcnQgb3B0aW9uIFx1MjAxNCB0d28gaG91cnMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xFRlRPVkVSX01BWF9BR0VfSU5fTUlMTElTRUNPTkRTID0gN18yMDBfMDAwO1xuXG4vKipcbiAqIE5hbWUgb2YgdGhlIGhhcm5lc3MncyBvd24gZGlyZWN0b3J5IGluc2lkZSB7QGxpbmsgdG1wZGlyfSwgd2hpY2ggaG9sZHMgdGhlXG4gKiBvd25lZCBpbnN0YW5jZXMnIHVzZXItZGF0YSBkaXJlY3RvcmllcyBhbG9uZ3NpZGUgdGhlIHZlcnNpb24vaW5zdGFsbGVyIGNhY2hlc1xuICogYW5kIHRoZSBzZXR1cCBsb2Nrcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSA9ICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJztcblxuLyoqXG4gKiBQcmVmaXggb2YgYW4gb3duZWQgZGVza3RvcCBpbnN0YW5jZSdzIGlzb2xhdGVkIHVzZXItZGF0YSBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBPV05FRF9VU0VSX0RBVEFfRElSX1BSRUZJWCA9ICd1c2VyZGF0YS0nO1xuXG4vKipcbiAqIFByZWZpeCBvZiBhIHRlbXBvcmFyeSB2YXVsdCBkaXJlY3RvcnksIGJvdGggb24gdGhlIGhvc3QgKHdoZXJlIGl0IGlzIGNyZWF0ZWQpXG4gKiBhbmQgb24gYW4gQW5kcm9pZCBkZXZpY2UgKHdoZXJlIGl0IGtlZXBzIGl0cyBob3N0IGJhc2VuYW1lKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFTVBfVkFVTFRfRElSX1BSRUZJWCA9ICd0ZW1wLXZhdWx0LSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNMZWZ0b3ZlclN0YWxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0lzTGVmdG92ZXJTdGFsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBIb3cgb2xkIGFuIGVudHJ5IG11c3QgYmUgdG8gY291bnQgYXMgc3RhbGUuIGAwYCBkaXNhYmxlcyB0aGUgZ2F0ZSwgbWFraW5nXG4gICAqIGV2ZXJ5IGVudHJ5IHN0YWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIGVudHJ5J3MgbW9kaWZpY2F0aW9uIHRpbWUsIGluIGVwb2NoIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgY3VycmVudCB0aW1lLCBpbiBlcG9jaCBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBub3dJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaWx0ZXJMZWZ0b3Zlck5hbWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJMZWZ0b3Zlck5hbWVzUGFyYW1zIHtcbiAgLyoqXG4gIE5hbWVzIHRvIGtlZXAgZXZlbiB3aGVuIHRoZXkgbWF0Y2ggYSBwcmVmaXggKGUuZy4gdGhlIGN1cnJlbnQgcnVuJ3Mgb3duIHZhdWx0KS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmF3IGVudHJ5IG5hbWVzLiBBY2NlcHRzIGBhZGIgc2hlbGwgbHNgIG91dHB1dCBzcGxpdCBpbnRvIGxpbmVzLCBzbyBlYWNoXG4gICAqIG5hbWUgaXMgdHJpbW1lZCAoZHJvcHBpbmcgdGhlIHRyYWlsaW5nIGBcXHJgIGFuIGBhZGJgIHNoZWxsIGFkZHMgb24gV2luZG93cylcbiAgICogYW5kIGJsYW5rIGxpbmVzIGFyZSBkcm9wcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBEaXJlY3RvcnktbmFtZSBwcmVmaXhlcyB0aGF0IG1hcmsgYW4gZW50cnkgYXMgdGhlIGhhcm5lc3MncyBvd24gcmVzaWR1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeGVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGRpcmVjdG9yeSB0aGUgaG9zdCBzd2VlcCBzY2FucywgdG9nZXRoZXIgd2l0aCB0aGUgcHJlZml4ZXMgdGhhdCBtYXJrXG4gKiByZXNpZHVlIGluc2lkZSBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWZ0b3ZlclJvb3Qge1xuICAvKipcbiAgVGhlIGFic29sdXRlIHBhdGggdG8gc2Nhbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgRGlyZWN0b3J5LW5hbWUgcHJlZml4ZXMgdGhhdCBtYXJrIGFuIGVudHJ5IGFzIHJlbW92YWJsZSByZXNpZHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4ZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzd2VlcERldmljZUxlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBEZXZpY2VMZWZ0b3ZlcnNQYXJhbXMge1xuICAvKipcbiAgICogTGlzdHMgdGhlIGVudHJ5IG5hbWVzIGRpcmVjdGx5IHVuZGVyIHRoZSB2YXVsdCBiYXNlIHBhdGguIEEgbGlzdGluZyBmYWlsdXJlXG4gICAqIG11c3QgcmVzb2x2ZSB0byBhbiBlbXB0eSBsaXN0IHJhdGhlciB0aGFuIHJlamVjdCBcdTIwMTQgYSBkZXZpY2Ugd2l0aCBubyB2YXVsdFxuICAgKiBkaXJlY3RvcnkgeWV0IGlzIHRoZSBub3JtYWwgZmlyc3QtcnVuIHN0YXRlLCBub3QgYW4gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBsaXN0TmFtZXM6ICgpID0+IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIE9ORSBkaXJlY3RvcnksIGJ5IGFic29sdXRlIGRldmljZSBwYXRoLiBNYXkgcmVqZWN0OyB0aGUgY2FsbGVyXG4gICAqIHRyZWF0cyBhIHJlamVjdGlvbiBhcyB0aGlzIGRpcmVjdG9yeSBmYWlsaW5nIGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92ZURpcmVjdG9yeTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgVGhlIGFic29sdXRlIGRldmljZSBwYXRoIHRoZSB2YXVsdHMgc2l0IHVuZGVyLCBpbmNsdWRpbmcgaXRzIHRyYWlsaW5nIHNlcGFyYXRvci5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Yge0BsaW5rIHN3ZWVwRGV2aWNlTGVmdG92ZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2VlcERldmljZUxlZnRvdmVyc1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZXMgdGhhdCB3ZXJlIHN0aWxsIHByZXNlbnQgYWZ0ZXIgdGhlIHN3ZWVwLiBOYW1lZCByYXRoZXIgdGhhblxuICAgKiBjb3VudGVkLCBiZWNhdXNlIHRoZSBpbnRlcmVzdGluZyBjYXNlIGlzIGEgZGlyZWN0b3J5IHRoYXQgZmFpbHMgRVZFUlkgcnVuXG4gICAqIGFuZCBhIGNhbGxlciBjYW4gb25seSBzYXkgc28gaWYgaXQga25vd3Mgd2hpY2ggb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkTmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBIb3cgbWFueSBkaXJlY3RvcmllcyBhcmUgdmVyaWZpYWJseSBnb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHN3ZWVwSG9zdExlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBIb3N0TGVmdG92ZXJzT3B0aW9ucyB7XG4gIC8qKlxuICBOYW1lcyB0byBrZWVwIHJlZ2FyZGxlc3Mgb2YgYWdlIChlLmcuIHRoZSBjdXJyZW50IHJ1bidzIG93biBkaXJlY3RvcmllcykuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZE5hbWVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmUgaXQgaXMgcmVtb3ZlZC4gYDBgIHJlbW92ZXMgZXZlcnkgbWF0Y2guXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX0xFRlRPVkVSX01BWF9BR0VfSU5fTUlMTElTRUNPTkRTfVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlSW5NaWxsaXNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSByb290cyB0byBzd2VlcC4gRGVmYXVsdHMgdG8gdGhlIHRlbXAtdmF1bHQgcm9vdCAoe0BsaW5rIHRtcGRpcn0pIGFuZCB0aGVcbiAgICogb3duZWQgdXNlci1kYXRhIHJvb3QgKGA8dG1wZGlyPi97QGxpbmsgSEFSTkVTU19URU1QX0RJUl9OQU1FfWApLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdHM/OiByZWFkb25seSBMZWZ0b3ZlclJvb3RbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Yge0BsaW5rIHN3ZWVwSG9zdExlZnRvdmVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dlZXBIb3N0TGVmdG92ZXJzUmVzdWx0IHtcbiAgLyoqXG4gIEhvdyBtYW55IGRpcmVjdG9yaWVzIHdlcmUgc2VsZWN0ZWQgZm9yIHJlbW92YWwgYnV0IGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgSG93IG1hbnkgZGlyZWN0b3JpZXMgd2VyZSByZW1vdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrSXNSZW1vdmFibGVEaXJ9LlxuICovXG5pbnRlcmZhY2UgQ2hlY2tJc1JlbW92YWJsZURpcmVjdG9yeVBhcmFtcyB7XG4gIC8qKlxuICBIb3cgb2xkIHRoZSBlbnRyeSBtdXN0IGJlIHRvIGJlIHJlbW92ZWQgKGAwYCBkaXNhYmxlcyB0aGUgZ2F0ZSkuXG4gICAqL1xuICByZWFkb25seSBtYXhBZ2VJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgc3dlZXAncyByZWZlcmVuY2UgdGltZSwgaW4gZXBvY2ggbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbm93SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hldGhlciBhIGxlZnRvdmVyIGVudHJ5IGlzIG9sZCBlbm91Z2ggdG8gYmUgcmVtb3ZlZC5cbiAqXG4gKiBUaGUgZ2F0ZSBleGlzdHMgYmVjYXVzZSBldmVyeSBwcm9qZWN0IG9uIHRoZSBtYWNoaW5lIHNoYXJlcyBvbmUgYHRtcGRpcigpYFxuICogYW5kIGRlc2t0b3AgcnVucyBhcmUgbm90IHNlcmlhbGl6ZWQsIHNvIGEgeW91bmcgZGlyZWN0b3J5IG1heSB3ZWxsIGJlbG9uZyB0b1xuICogYSBydW4gdGhhdCBpcyBzdGlsbCBpbiBmbGlnaHQuIEFuIGVudHJ5IHdob3NlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIGluIHRoZVxuICogZnV0dXJlIChhIGNsb2NrIHNrZXcpIGlzIHRyZWF0ZWQgYXMgbGl2ZSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgYWdlIGNvbXBhcmlzb24gaW5wdXRzLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGVudHJ5IG1heSBiZSByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJc0xlZnRvdmVyU3RhbGUocGFyYW1zOiBDaGVja0lzTGVmdG92ZXJTdGFsZVBhcmFtcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyYW1zLm1heEFnZUluTWlsbGlzZWNvbmRzID09PSAwIHx8IHBhcmFtcy5ub3dJbk1pbGxpc2Vjb25kcyAtIHBhcmFtcy5tb2RpZmllZEF0SW5NaWxsaXNlY29uZHMgPj0gcGFyYW1zLm1heEFnZUluTWlsbGlzZWNvbmRzO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIGVudHJ5IG5hbWVzIHRoYXQgYXJlIHRoZSBoYXJuZXNzJ3Mgb3duIHJlc2lkdWUuXG4gKlxuICogTmFtZS1vbmx5LCBzbyB0aGUgY2FsbGVyIGNhbiBmaWx0ZXIgYSBsYXJnZSBkaXJlY3RvcnkgbGlzdGluZyBiZWZvcmUgcGF5aW5nXG4gKiBmb3IgYSBgc3RhdGAgcGVyIGVudHJ5LCBhbmQgc28gdGhlIEFuZHJvaWQgc3dlZXAgY2FuIGZlZWQgaXQgcmF3XG4gKiBgYWRiIHNoZWxsIGxzYCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBuYW1lcywgcHJlZml4ZXMsIGFuZCBleGNsdXNpb25zLlxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIG5hbWVzLCB0cmltbWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTGVmdG92ZXJOYW1lcyhwYXJhbXM6IEZpbHRlckxlZnRvdmVyTmFtZXNQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXMgPSBwYXJhbXMuZXhjbHVkZWROYW1lcyA/PyBbXTtcbiAgcmV0dXJuIHBhcmFtcy5uYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IG5hbWUudHJpbSgpKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+IHBhcmFtcy5wcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSlcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhZXhjbHVkZWROYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGxlZnRvdmVyIGFnZSBnYXRlLCBhcHBseWluZyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBvcHRpb24gaXNcbiAqIG9taXR0ZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWF4IGFnZSBpbiBtaWxsaXNlY29uZHMgKGAwYCBkaXNhYmxlcyB0aGUgZ2F0ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyhvcHRpb25zOiBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnMgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gb3B0aW9ucz8ubGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0xFRlRPVkVSX01BWF9BR0VfSU5fTUlMTElTRUNPTkRTO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxlZnRvdmVyIHZhdWx0IGRpcmVjdG9yaWVzIGEgZGV2aWNlIGlzIGNhcnJ5aW5nLCBvbmUgZGlyZWN0b3J5IGF0XG4gKiBhIHRpbWUsIGFuZCByZXBvcnRzIHdoYXQgaXMgdmVyaWZpYWJseSBnb25lLlxuICpcbiAqICoqT25lIGRpcmVjdG9yeSBwZXIgcmVtb3ZhbCwgYW5kIGEgZmFpbHVyZSBpcyBub24tZmF0YWwuKiogUmVtb3ZpbmcgdGhlIHdob2xlXG4gKiBzZXQgaW4gYSBzaW5nbGUgYHJtIC1yZmAgbGV0cyBvbmUgdW4tcmVtb3ZhYmxlIGVudHJ5IGRlY2lkZSB0aGUgZmF0ZSBvZiBldmVyeVxuICogb3RoZXI6IGEgbmFtZSB0aGF0IHRoZSBGVVNFIGxheWVyIGNhbm5vdCBleHByZXNzIChhbiBBbmRyb2lkIGVtdWxhdG9yIGNhblxuICogcHJvZHVjZSBvbmUgXHUyMDE0IGBybSAtcmZgLCBgZmluZCAtZGVsZXRlYCBhbmQgZm9yY2Utc3RvcHBpbmcgT2JzaWRpYW4gZmlyc3QgYWxsXG4gKiBhbnN3ZXIgYE9wZXJhdGlvbiBub3QgcGVybWl0dGVkYCkgaXMgcGVybWFuZW50LCBzbyBhIHN3ZWVwIHRoYXQgZ2l2ZXMgdXAgb24gaXRcbiAqIGdpdmVzIHVwIGZvcmV2ZXIsIGFuZCB0aGUgcmVzaWR1ZSBvbmx5IGdyb3dzLiBQZXItZGlyZWN0b3J5LCB0aGF0IGVudHJ5IGNvc3RzXG4gKiBvbmUgd2FybmluZyBwZXIgcnVuIGluc3RlYWQgb2YgdGhlIHdob2xlIHN3ZWVwLlxuICpcbiAqICoqVGhlIHJlc3VsdCBpcyBtZWFzdXJlZCwgbm90IGFzc3VtZWQuKiogVGhlIGRpcmVjdG9yaWVzIGFyZSByZS1saXN0ZWRcbiAqIGFmdGVyd2FyZHMgYW5kIG9ubHkgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBkaXNhcHBlYXJlZCBhcmUgY291bnRlZCwgYmVjYXVzZVxuICogdGhlIGZhaWx1cmUgdGhpcyB3YXMgd3JpdHRlbiBmb3Igd2FzIGEgc3dlZXAgdGhhdCByZXBvcnRlZCBzdWNjZXNzIHdoaWxlXG4gKiBjbGVhcmluZyBub3RoaW5nIFx1MjAxNCBhIHJlbW92YWwgY29tbWFuZCBjYW4gZXhpdCBub24temVybywgb3IgcGFydGlhbGx5IHN1Y2NlZWQsXG4gKiBhbmQgbmVpdGhlciBpcyB2aXNpYmxlIGZyb20gaXRzIGV4aXQgY29kZSBhbG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gSG93IHRvIGxpc3QgYW5kIHJlbW92ZSwgYW5kIHRoZSBiYXNlIHBhdGggdG8gc3dlZXAuXG4gKiBAcmV0dXJucyBUaGUgdmVyaWZpZWQgcmVtb3ZhbCBjb3VudCBhbmQgdGhlIG5hbWVzIHRoYXQgc3Vydml2ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2VlcERldmljZUxlZnRvdmVycyhcbiAgcGFyYW1zOiBTd2VlcERldmljZUxlZnRvdmVyc1BhcmFtc1xuKTogUHJvbWlzZTxTd2VlcERldmljZUxlZnRvdmVyc1Jlc3VsdD4ge1xuICBjb25zdCB7IGxpc3ROYW1lcywgcmVtb3ZlRGlyZWN0b3J5LCB2YXVsdEJhc2VQYXRoIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbmFtZXMgPSBmaWx0ZXJMZWZ0b3Zlck5hbWVzKHsgbmFtZXM6IGF3YWl0IGxpc3ROYW1lcygpLCBwcmVmaXhlczogW1RFTVBfVkFVTFRfRElSX1BSRUZJWF0gfSk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBmYWlsZWROYW1lczogW10sIHJlbW92ZWRDb3VudDogMCB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlbW92ZURpcmVjdG9yeShgJHt2YXVsdEJhc2VQYXRofSR7bmFtZX1gKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vbi1mYXRhbCBieSBkZXNpZ246IHRoZSBuZXh0IGRpcmVjdG9yeSBzdGlsbCBnZXRzIGl0cyBjaGFuY2UuXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vydml2aW5nTmFtZXMgPSBmaWx0ZXJMZWZ0b3Zlck5hbWVzKHsgbmFtZXM6IGF3YWl0IGxpc3ROYW1lcygpLCBwcmVmaXhlczogW1RFTVBfVkFVTFRfRElSX1BSRUZJWF0gfSk7XG4gIGNvbnN0IGZhaWxlZE5hbWVzID0gbmFtZXMuZmlsdGVyKChuYW1lKSA9PiBzdXJ2aXZpbmdOYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG5cbiAgcmV0dXJuIHsgZmFpbGVkTmFtZXMsIHJlbW92ZWRDb3VudDogbmFtZXMubGVuZ3RoIC0gZmFpbGVkTmFtZXMubGVuZ3RoIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaG9zdC1zaWRlIGRpcmVjdG9yaWVzIGxlZnQgYmVoaW5kIGJ5IGVhcmxpZXIgcnVucy5cbiAqXG4gKiBCZXN0LWVmZm9ydCB0aHJvdWdob3V0OiBhbiB1bnJlYWRhYmxlIHJvb3QsIGFuIGVudHJ5IHRoYXQgY2Fubm90IGJlIGBzdGF0YGVkLFxuICogYW5kIGEgZGlyZWN0b3J5IHRoYXQgcmVmdXNlcyB0byBiZSByZW1vdmVkIChhIGxpdmUgcHJvY2VzcyBzdGlsbCBob2xkaW5nIGFcbiAqIGhhbmRsZSBhbnN3ZXJzIGBFUEVSTWAgb24gV2luZG93cykgYXJlIGFsbCBza2lwcGVkIHJhdGhlciB0aGFuIHRocm93biwgc28gYVxuICogc3dlZXAgY2FuIG5ldmVyIGZhaWwgdGhlIHJ1biBpdCBpcyBjbGVhbmluZyB1cCBmb3IuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgc3dlZXAgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEhvdyBtYW55IGRpcmVjdG9yaWVzIHdlcmUgcmVtb3ZlZCwgYW5kIGhvdyBtYW55IHJlc2lzdGVkIHJlbW92YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2VlcEhvc3RMZWZ0b3ZlcnMob3B0aW9ucz86IFN3ZWVwSG9zdExlZnRvdmVyc09wdGlvbnMpOiBQcm9taXNlPFN3ZWVwSG9zdExlZnRvdmVyc1Jlc3VsdD4ge1xuICBjb25zdCBtYXhBZ2VJbk1pbGxpc2Vjb25kcyA9IG9wdGlvbnM/Lm1heEFnZUluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfTEVGVE9WRVJfTUFYX0FHRV9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IG5vd0luTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgcm9vdHMgPSBvcHRpb25zPy5yb290cyA/PyBnZXREZWZhdWx0TGVmdG92ZXJSb290cygpO1xuXG4gIGxldCBmYWlsZWRDb3VudCA9IDA7XG4gIGxldCByZW1vdmVkQ291bnQgPSAwO1xuXG4gIGZvciAoY29uc3Qgcm9vdCBvZiByb290cykge1xuICAgIGNvbnN0IG5hbWVzID0gZmlsdGVyTGVmdG92ZXJOYW1lcyh7XG4gICAgICBleGNsdWRlZE5hbWVzOiBvcHRpb25zPy5leGNsdWRlZE5hbWVzLFxuICAgICAgbmFtZXM6IGF3YWl0IHJlYWREaXJlY3RvcnlOYW1lcyhyb290LnBhdGgpLFxuICAgICAgcHJlZml4ZXM6IHJvb3QucHJlZml4ZXNcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgcGF0aCA9IGpvaW4ocm9vdC5wYXRoLCBuYW1lKTtcbiAgICAgIGlmICghYXdhaXQgY2hlY2tJc1JlbW92YWJsZURpcmVjdG9yeSh7IG1heEFnZUluTWlsbGlzZWNvbmRzLCBub3dJbk1pbGxpc2Vjb25kcywgcGF0aCB9KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZW1vdmVkQ291bnQrKztcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBmYWlsZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZhaWxlZENvdW50LCByZW1vdmVkQ291bnQgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aGV0aGVyIGxlZnRvdmVyIGRpcmVjdG9yaWVzIGFyZSBzd2VwdCwgYXBwbHlpbmcgdGhlIGRlZmF1bHQgd2hlblxuICogdGhlIG9wdGlvbiBpcyBvbWl0dGVkLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHRyYW5zcG9ydCBvcHRpb25zLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHN3ZWVwcyBzaG91bGQgcnVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2lsbFN3ZWVwTGVmdG92ZXJzKG9wdGlvbnM6IE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3B0aW9ucz8uc2hvdWxkU3dlZXBMZWZ0b3ZlcnMgPz8gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG1hdGNoZWQgZW50cnkgaXMgYSBkaXJlY3Rvcnkgb2xkIGVub3VnaCB0byByZW1vdmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbnRyeSBwYXRoIGFuZCBhZ2UtZ2F0ZSBpbnB1dHMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZW50cnkgbWF5IGJlIHJlbW92ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrSXNSZW1vdmFibGVEaXJlY3RvcnkocGFyYW1zOiBDaGVja0lzUmVtb3ZhYmxlRGlyZWN0b3J5UGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgbWF4QWdlSW5NaWxsaXNlY29uZHMsIG5vd0luTWlsbGlzZWNvbmRzIH0gPSBwYXJhbXM7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhcmFtcy5wYXRoKTtcbiAgICByZXR1cm4gc3RhdHMuaXNEaXJlY3RvcnkoKVxuICAgICAgJiYgY2hlY2tJc0xlZnRvdmVyU3RhbGUoeyBtYXhBZ2VJbk1pbGxpc2Vjb25kcywgbW9kaWZpZWRBdEluTWlsbGlzZWNvbmRzOiBzdGF0cy5tdGltZU1zLCBub3dJbk1pbGxpc2Vjb25kcyB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVmFuaXNoZWQsIG9yIHVucmVhZGFibGUgXHUyMDE0IGVpdGhlciB3YXkgaXQgaXMgbm90IG91cnMgdG8gcmVtb3ZlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJvb3RzIHN3ZXB0IHdoZW4gdGhlIGNhbGxlciBkb2VzIG5vdCBuYW1lIGl0cyBvd24uXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXAtdmF1bHQgcm9vdCBhbmQgdGhlIG93bmVkIHVzZXItZGF0YSByb290LlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0TGVmdG92ZXJSb290cygpOiBMZWZ0b3ZlclJvb3RbXSB7XG4gIHJldHVybiBbXG4gICAgeyBwYXRoOiB0bXBkaXIoKSwgcHJlZml4ZXM6IFtURU1QX1ZBVUxUX0RJUl9QUkVGSVhdIH0sXG4gICAgeyBwYXRoOiBqb2luKHRtcGRpcigpLCBIQVJORVNTX1RFTVBfRElSX05BTUUpLCBwcmVmaXhlczogW09XTkVEX1VTRVJfREFUQV9ESVJfUFJFRklYXSB9XG4gIF07XG59XG5cbi8qKlxuICogTGlzdHMgYSBkaXJlY3RvcnkncyBlbnRyeSBuYW1lcywgdHJlYXRpbmcgYW4gdW5yZWFkYWJsZSBkaXJlY3RvcnkgYXMgZW1wdHkuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byBsaXN0LlxuICogQHJldHVybnMgVGhlIGVudHJ5IG5hbWVzLCBvciBhbiBlbXB0eSBsaXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkRGlyZWN0b3J5TmFtZXMocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWFkZGlyKHBhdGgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyQkEsc0JBSU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBT2QsTUFBTSwyQ0FBMkM7QUFPakQsTUFBTSx3QkFBd0I7QUFLOUIsTUFBTSw2QkFBNkI7QUFNbkMsTUFBTSx3QkFBd0I7QUEwSzlCLFNBQVMscUJBQXFCLFFBQTZDO0FBQ2hGLFNBQU8sT0FBTyx5QkFBeUIsS0FBSyxPQUFPLG9CQUFvQixPQUFPLDRCQUE0QixPQUFPO0FBQ25IO0FBWU8sU0FBUyxvQkFBb0IsUUFBNkM7QUFDL0UsUUFBTSxnQkFBZ0IsT0FBTyxpQkFBaUIsQ0FBQztBQUMvQyxTQUFPLE9BQU8sTUFDWCxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUN6QixPQUFPLENBQUMsU0FBUyxPQUFPLFNBQVMsS0FBSyxDQUFDLFdBQVcsS0FBSyxXQUFXLE1BQU0sQ0FBQyxDQUFDLEVBQzFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxTQUFTLElBQUksQ0FBQztBQUNuRDtBQVNPLFNBQVMsb0NBQW9DLFNBQXVEO0FBQ3pHLFNBQU8sU0FBUyxnQ0FBZ0M7QUFDbEQ7QUF1QkEsZUFBc0IscUJBQ3BCLFFBQ3FDO0FB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
|
package/dist/lib/cjs/library.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __export(library_exports, {
|
|
|
21
21
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(library_exports);
|
|
24
|
-
const LIBRARY_VERSION = false ? "dev" : "
|
|
24
|
+
const LIBRARY_VERSION = false ? "dev" : "16.0.0";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIBRARY_VERSION
|
|
@@ -74,10 +74,7 @@ function buildResolveInputExpression(id, errorMessage) {
|
|
|
74
74
|
return `window.__obsidianIntegrationTesting?.resolveInput?.(${JSON.stringify(id)}, ${JSON.stringify(errorMessage ?? null)})`;
|
|
75
75
|
}
|
|
76
76
|
function checkInputClaimGranted(result) {
|
|
77
|
-
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
return result.result?.value !== false;
|
|
77
|
+
return typeof result !== "object" || result === null || result.result?.value !== false;
|
|
81
78
|
}
|
|
82
79
|
function codePointOf(text) {
|
|
83
80
|
const codePoint = text.codePointAt(FIRST_CODE_POINT_INDEX);
|
|
@@ -87,10 +84,7 @@ function codePointOf(text) {
|
|
|
87
84
|
return codePoint;
|
|
88
85
|
}
|
|
89
86
|
function toCdpInputCommands(request) {
|
|
90
|
-
|
|
91
|
-
return toKeyCommands(request);
|
|
92
|
-
}
|
|
93
|
-
return toPointerCommands(request);
|
|
87
|
+
return request.kind === "key" ? toKeyCommands(request) : toPointerCommands(request);
|
|
94
88
|
}
|
|
95
89
|
function toCdpModifiers(modifiers) {
|
|
96
90
|
const bits = /* @__PURE__ */ new Set();
|
|
@@ -128,40 +122,32 @@ function resolveKeyCode(upperCasedCodePoint) {
|
|
|
128
122
|
if (upperCasedCodePoint >= UPPERCASE_A_CODE_POINT && upperCasedCodePoint <= UPPERCASE_Z_CODE_POINT) {
|
|
129
123
|
return `Key${String.fromCodePoint(upperCasedCodePoint)}`;
|
|
130
124
|
}
|
|
131
|
-
|
|
132
|
-
return `Digit${String.fromCodePoint(upperCasedCodePoint)}`;
|
|
133
|
-
}
|
|
134
|
-
return "";
|
|
125
|
+
return upperCasedCodePoint >= DIGIT_ZERO_CODE_POINT && upperCasedCodePoint <= DIGIT_NINE_CODE_POINT ? `Digit${String.fromCodePoint(upperCasedCodePoint)}` : "";
|
|
135
126
|
}
|
|
136
127
|
function toKeyCommands(request) {
|
|
137
128
|
const { code, text, windowsVirtualKeyCode } = resolveKey(request.key);
|
|
138
129
|
const modifiers = toCdpModifiers(request.modifiers);
|
|
139
130
|
const base = { code, key: request.key, modifiers, windowsVirtualKeyCode };
|
|
140
131
|
const commands = [
|
|
141
|
-
{ method: "Input.dispatchKeyEvent", params: { ...base, type: "rawKeyDown" } }
|
|
132
|
+
{ method: "Input.dispatchKeyEvent", params: { ...base, type: "rawKeyDown" } },
|
|
133
|
+
...text === void 0 ? [] : [{ method: "Input.dispatchKeyEvent", params: { ...base, text, type: "char" } }],
|
|
134
|
+
{ method: "Input.dispatchKeyEvent", params: { ...base, type: "keyUp" } }
|
|
142
135
|
];
|
|
143
|
-
if (text !== void 0) {
|
|
144
|
-
commands.push({ method: "Input.dispatchKeyEvent", params: { ...base, text, type: "char" } });
|
|
145
|
-
}
|
|
146
|
-
commands.push({ method: "Input.dispatchKeyEvent", params: { ...base, type: "keyUp" } });
|
|
147
136
|
return commands;
|
|
148
137
|
}
|
|
149
138
|
function toPointerCommands(request) {
|
|
150
139
|
const modifiers = toCdpModifiers(request.modifiers);
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
y: request.y
|
|
160
|
-
}
|
|
140
|
+
return request.kind === "longPress" ? [
|
|
141
|
+
{
|
|
142
|
+
method: "Input.synthesizeTapGesture",
|
|
143
|
+
params: {
|
|
144
|
+
duration: LONG_PRESS_DWELL_IN_MILLISECONDS,
|
|
145
|
+
gestureSourceType: "touch",
|
|
146
|
+
x: request.x,
|
|
147
|
+
y: request.y
|
|
161
148
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return [
|
|
149
|
+
}
|
|
150
|
+
] : [
|
|
165
151
|
{
|
|
166
152
|
method: "Input.dispatchTouchEvent",
|
|
167
153
|
params: { modifiers, touchPoints: [{ x: request.x, y: request.y }], type: "touchStart" }
|
|
@@ -183,4 +169,4 @@ function toPointerCommands(request) {
|
|
|
183
169
|
toCdpInputCommands,
|
|
184
170
|
toCdpModifiers
|
|
185
171
|
});
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vYmlsZS1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgdHJ1c3RlZC1pbnB1dCByZXF1ZXN0IGludG8gdGhlIG9yZGVyZWQgQ2hyb21lIERldlRvb2xzIFByb3RvY29sIGBJbnB1dC4qYCBjb21tYW5kc1xuICogdGhhdCByZWFsaXplIGl0IChzZWUgKipMMzkqKikuXG4gKlxuICogUHVyZSBhbmQgc3luY2hyb25vdXMgYnkgZGVzaWduOiB0aGUgV2ViVmlldyBjb25uZWN0aW9uICh7QGxpbmsgV2ViVmlld0NkcENvbm5lY3Rpb259KSBzZW5kcyB3aGF0ZXZlciB0aGlzXG4gKiByZXR1cm5zLCBzbyBldmVyeSBkZWNpc2lvbiB0aGF0IGlzIHdvcnRoIGEgdGVzdCBcdTIwMTQgdGhlIHRvdWNoIHBhaXIgYSB0YXAgZXhwYW5kcyBpbnRvLCB0aGUgZHdlbGwgYVxuICogbG9uZy1wcmVzcyBhZGRzLCB0aGUgYHJhd0tleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2hhcGUgYSBrZXkgcHJlc3MgbWlycm9ycyBmcm9tIHRoZSBkZXNrdG9wIHR3aW4sIHRoZVxuICogbW9kaWZpZXIgYml0bWFzayBcdTIwMTQgbGl2ZXMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIHRyYW5zcG9ydCdzIEkvTyBwYXRoLlxuICpcbiAqIFRoZSByZXF1ZXN0IHRyYXZlbHMgcmVuZGVyZXIgXHUyMTkyIGhvc3QgYXMgSlNPTiAodGhlIHJlbmRlcmVyIGNvbXB1dGVzIHRoZSBjb29yZGluYXRlcywgYmVjYXVzZSBvbmx5IGl0IGNhblxuICogc2VlIHRoZSBET00pLCBzbyBib3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgY29tbWFuZCBzaGFwZXMgYXJlIGRlbGliZXJhdGVseSBwbGFpbiBkYXRhLlxuICovXG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGBSdW50aW1lLmFkZEJpbmRpbmdgIGZ1bmN0aW9uIHRoZSBob3N0IGV4cG9zZXMgb24gdGhlIHBhZ2Ugc28gdGhlIHJlbmRlcmVyIGNhbiBoYW5kIGl0IGFuXG4gKiBpbnB1dCByZXF1ZXN0IG1pZC1jbG9zdXJlLlxuICpcbiAqIEl0IGlzIHBhc3NlZCAqaW50byogdGhlIHNlcmlhbGl6ZWQgYm9vdHN0cmFwIGNsb3N1cmUgYXMgZGF0YSByYXRoZXIgdGhhbiByZWZlcmVuY2VkIGZyb20gaXQsIGJlY2F1c2UgdGhhdFxuICogY2xvc3VyZSBtYXkgbm90IHJlYWQgb3V0ZXIgc2NvcGUgKCoqTDE1KiopIFx1MjAxNCBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUUgPSAnX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0lucHV0JztcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgcmVuZGVyZXIgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHNlcnZpY2Ugb25lIGlucHV0IHJlcXVlc3QgYmVmb3JlIGdpdmluZyB1cC5cbiAqXG4gKiBHZW5lcm91cyByZWxhdGl2ZSB0byB0aGUgd29yayAoYSB0YXAgaXMgdHdvIENEUCBjb21tYW5kczsgYSBsb25nLXByZXNzIGFkZHMgYSA2MDBtcyBkd2VsbCk6IHRoZSBwb2ludCBpc1xuICogdG8gZmFpbCB3aXRoIGEgbGVnaWJsZSBlcnJvciByYXRoZXIgdGhhbiBoYW5nIHRoZSBjbG9zdXJlIHVudGlsIHRoZSB3aG9sZSBydW4gdGltZXMgb3V0LiBQYXNzZWQgaW50byB0aGVcbiAqIGJvb3RzdHJhcCBjbG9zdXJlIGFzIGRhdGEsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUV9LlxuICovXG5leHBvcnQgY29uc3QgTU9CSUxFX0lOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTVfMDAwO1xuXG4vKipcbiAqIEEgc2luZ2xlIENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb21tYW5kLlxuICpcbiAqIEl0IG9uY2UgYWxzbyBjYXJyaWVkIGEgYGRlbGF5QmVmb3JlSW5NaWxsaXNlY29uZHNgLCBzbyB0aGUgaG9zdCB3b3VsZCBzbGVlcCBiZXR3ZWVuIHRoZSB0d28gaGFsdmVzIG9mIGFcbiAqIGxvbmctcHJlc3MuIFRoYXQgZHdlbGwgaXMgZ29uZTogdGhlIGdlc3R1cmUgaXMgbm93IG9uZSBgSW5wdXQuc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRoYXQgaG9sZHMgaXRzZWxmXG4gKiBmb3IgaXRzIG93biBgZHVyYXRpb25gLCBzbyBubyBjb21tYW5kIGluIGFueSBzZXF1ZW5jZSBuZWVkcyB0byBiZSBzcGFjZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBpdCwgYW5kIGFcbiAqIGtub2Igbm90aGluZyBzZXRzIGlzIHdvcnNlIHRoYW4gbm8ga25vYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBJbnB1dENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIENEUCBtZXRob2QgbmFtZSwgZS5nLiBgSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSByZW5kZXJlciBoYW5kcyB0byB0aGUgaG9zdCBiaW5kaW5nOiBvbmUgcmVxdWVzdCwgcGx1cyB0aGUgaWQgdG8gYW5zd2VyIGl0IG9uLlxuICpcbiAqIFRoZSByZW5kZXJlciBidWlsZHMgdGhpcyBsaXRlcmFsIGluc2lkZSB0aGUgc2VyaWFsaXplZCBib290c3RyYXAgY2xvc3VyZSwgd2hpY2ggY2Fubm90IGltcG9ydCAoKipMMTUqKiksXG4gKiBzbyB0aGUgc2hhcGUgaXMgZGVjbGFyZWQgaGVyZSBhbmQgbWlycm9yZWQgdGhlcmUuIFRoZXkgYXJlIG9uZSB3aXJlIGZvcm1hdDsgY2hhbmdlIHRoZW0gdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlSW5wdXRFbnZlbG9wZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZCB0aGUgcmVuZGVyZXIgaXMgd2FpdGluZyBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdG8gaW5qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0O1xufVxuXG4vKipcbiAqIEFueXRoaW5nIHRoZSByZW5kZXJlciBjYW4gYXNrIHRoZSBob3N0IHRvIGluamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgTW9iaWxlSW5wdXRSZXF1ZXN0ID0gTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHwgTW9iaWxlUG9pbnRlcklucHV0UmVxdWVzdDtcblxuLyoqXG4gKiBBIHRydXN0ZWQga2V5IHByZXNzIHRvIGluamVjdCBvbiBtb2JpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGluIHRoZSBzYW1lIHNwZWxsaW5nIHRoZSBkZXNrdG9wIHR3aW4gdGFrZXM6IGVpdGhlciBhIG5hbWVkIGtleVxuICAgKiAoYEVudGVyYCwgYEVzY2FwZWAsIGBUYWJgLCBgQmFja3NwYWNlYCwgYERlbGV0ZWAsIGFuIGFycm93KSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdrZXknO1xuXG4gIC8qKlxuICAgKiBNb2RpZmllcnMgYWxyZWFkeSByZXNvbHZlZCB0byB0aGVpciBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb3dlcmNhc2UgbmFtZXMgYnkgdGhlIHJlbmRlcmVyJ3NcbiAgICogYHRvRWxlY3Ryb25Nb2RpZmllcnNgIFx1MjAxNCB0aGUgb25lIG1hcHBpbmcgYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgc2hhcmUsIHNvIGAnTW9kJ2AgY2Fubm90IG1lYW4gdHdvXG4gICAqIGRpZmZlcmVudCB0aGluZ3MgKCoqTDE3KiopLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIHRydXN0ZWQgcG9pbnRlciBnZXN0dXJlIHRvIGluamVjdCBvbiBtb2JpbGUsIGluIENTUyBwaXhlbHMgd2l0aGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0LlxuICpcbiAqIE5vIGRldmljZS1waXhlbCBjb252ZXJzaW9uIGlzIGludm9sdmVkOiBDRFAgdGFrZXMgcGFnZSBjb29yZGluYXRlcywgc28gYGRldmljZVBpeGVsUmF0aW9gIGFuZCB0aGVcbiAqIFdlYlZpZXcncyBvZmZzZXQgdW5kZXIgdGhlIHN0YXR1cyBiYXIgbmV2ZXIgZW50ZXIgdGhlIHBpY3R1cmUgKHRoZXkgd291bGQgZm9yIG5hdGl2ZSBpbmplY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vYmlsZVBvaW50ZXJJbnB1dFJlcXVlc3Qge1xuICAvKipcbiAgICogYHRhcGAgaXMgdGhlIHRvdWNoIGFuYWxvZyBvZiBhIGxlZnQgY2xpY2s7IGBsb25nUHJlc3NgIGlzIHRoZSBtb2JpbGUgY29udGV4dC1tZW51IGdlc3R1cmUsIGkuZS4gd2hhdCBhXG4gICAqIGRlc2t0b3AgcmlnaHQgY2xpY2sgbWVhbnMgaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdsb25nUHJlc3MnIHwgJ3RhcCc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0Lm1vZGlmaWVyc30uXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeCBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeSBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBDRFAgYFJlbW90ZU9iamVjdGAgYW4gZXZhbHVhdGUgcmV0dXJucywgcmVkdWNlZCB0byB0aGUgb25lIGZpZWxkIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgRXZhbHVhdGVSZW1vdGVPYmplY3Qge1xuICByZWFkb25seSB2YWx1ZT86IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYSBDRFAgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlcGx5IHRoaXMgbW9kdWxlIHJlYWRzLlxuICpcbiAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGltcG9ydGVkOiB0aGUgaGFybmVzcyB0YWxrcyB0byB0aGUgV2ViVmlldyBkZWJ1Z2dlciBvdmVyIGEgcmF3IHNvY2tldCwgc28gdGhlcmVcbiAqIGlzIG5vIGdlbmVyYXRlZCBwcm90b2NvbCB0eXBlIHRvIHJlYWNoIGZvciwgYW5kIG9ubHkgdGhlIHJldHVybmVkIHZhbHVlIG1hdHRlcnMgaGVyZS5cbiAqL1xuaW50ZXJmYWNlIEV2YWx1YXRlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcmVzdWx0PzogRXZhbHVhdGVSZW1vdGVPYmplY3Q7XG59XG5cbi8qKlxuICogSG93IGxvbmcgYSBsb25nLXByZXNzIGhvbGRzIHRoZSB0b3VjaCBkb3duIGJlZm9yZSByZWxlYXNpbmcgaXQuXG4gKlxuICogSXQgaGFzIHRvIGNsZWFyICoqQW5kcm9pZCdzKiogbG9uZy1wcmVzcyB0aHJlc2hvbGQsIHdoaWNoIGlzIDUwMG1zIGJ5IGRlZmF1bHQ6IHRoZSBnZXN0dXJlIGlzXG4gKiByZWNvZ25pemVkIGJ5IHRoZSBwbGF0Zm9ybSwgYW5kIHRoZSBgY29udGV4dG1lbnVgIE9ic2lkaWFuJ3MgbWVudXMgaGFuZyBvZmYgaXMgd2hhdCB0aGUgcmVjb2duaXplclxuICogZW1pdHMuIDYwMG1zIGNsZWFycyB0aGF0IHdpdGggbWFyZ2luIHdpdGhvdXQgbWFraW5nIGV2ZXJ5IGxvbmctcHJlc3MgdGVzdCBub3RpY2VhYmx5IHNsb3dlci5cbiAqXG4gKiBUaGlzIGNvcnJlY3RzIHRoZSBmb3JtZXIgcmVhZGluZyBcdTIwMTQgdGhhdCBPYnNpZGlhbiBNb2JpbGUgaW1wbGVtZW50cyBsb25nLXByZXNzIGl0c2VsZiwgb24gYSBKYXZhU2NyaXB0XG4gKiBgdG91Y2hzdGFydGAgdGltZXIsIHNvIHRoZSBkd2VsbCBvbmx5IGhhZCB0byBjbGVhciAqaXRzKiB0aHJlc2hvbGQuIE1lYXN1cmVkIGFnYWluc3QgYSByZWFsXG4gKiBgLm5hdi1maWxlLXRpdGxlYCwgYSA2MDBtcyBkd2VsbCBiZXR3ZWVuIHR3byBkaXNwYXRjaGVkIHRvdWNoZXMgb3BlbmVkIHRoZSBub3RlIGluc3RlYWQgb2YgaXRzIG1lbnU7XG4gKiBzZWUge0BsaW5rIHRvUG9pbnRlckNvbW1hbmRzfSBmb3Igd2h5IHRoZSBkd2VsbCBhbG9uZSB3YXMgbmV2ZXIgZ29pbmcgdG8gYmUgZW5vdWdoLlxuICovXG5jb25zdCBMT05HX1BSRVNTX0RXRUxMX0lOX01JTExJU0VDT05EUyA9IDYwMDtcblxuY29uc3QgTk9fTU9ESUZJRVJTID0gMDtcbmNvbnN0IE1PRElGSUVSX0JJVF9BTFQgPSAxO1xuY29uc3QgTU9ESUZJRVJfQklUX0NPTlRST0wgPSAyO1xuY29uc3QgTU9ESUZJRVJfQklUX01FVEEgPSA0O1xuY29uc3QgTU9ESUZJRVJfQklUX1NISUZUID0gODtcblxuLyoqXG4gKiBDRFAncyBtb2RpZmllciBiaXRtYXNrLCB3aGljaCBpcyBub3QgdGhlIHNhbWUgc3BlbGxpbmcgYXMgRWxlY3Ryb24ncyBzdHJpbmcgbGlzdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC90b3QvSW5wdXQvI21ldGhvZC1kaXNwYXRjaEtleUV2ZW50fVxuICovXG5jb25zdCBDRFBfTU9ESUZJRVJfQklUX0JZX05BTUUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXG4gIFsnYWx0JywgTU9ESUZJRVJfQklUX0FMVF0sXG4gIFsnY29udHJvbCcsIE1PRElGSUVSX0JJVF9DT05UUk9MXSxcbiAgWydtZXRhJywgTU9ESUZJRVJfQklUX01FVEFdLFxuICBbJ3NoaWZ0JywgTU9ESUZJRVJfQklUX1NISUZUXVxuXSk7XG5cbmNvbnN0IEtFWV9DT0RFX0JBQ0tTUEFDRSA9IDg7XG5jb25zdCBLRVlfQ09ERV9UQUIgPSA5O1xuY29uc3QgS0VZX0NPREVfRU5URVIgPSAxMztcbmNvbnN0IEtFWV9DT0RFX0VTQ0FQRSA9IDI3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfTEVGVCA9IDM3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfVVAgPSAzODtcbmNvbnN0IEtFWV9DT0RFX0FSUk9XX1JJR0hUID0gMzk7XG5jb25zdCBLRVlfQ09ERV9BUlJPV19ET1dOID0gNDA7XG5jb25zdCBLRVlfQ09ERV9ERUxFVEUgPSA0NjtcblxuLyoqXG4gKiBOYW1lZCBrZXlzLCB3aXRoIHRoZSBgdGV4dGAgYSByZWFsIGtleSBwcmVzcyB3b3VsZCBwcm9kdWNlIChhYnNlbnQgd2hlbiBpdCBwcm9kdWNlcyBub25lKS5cbiAqXG4gKiBPbmx5IGtleXMgdGhlc2Ugc3VpdGVzIGFjdHVhbGx5IHByZXNzIGFyZSBsaXN0ZWQsIHBsdXMgdGhlIGVkaXRpbmcga2V5cyBhIGNhbGxlciB3b3VsZCByZWFzb25hYmx5IHJlYWNoXG4gKiBmb3IgbmV4dC4gQW4gdW5rbm93biBtdWx0aS1jaGFyYWN0ZXIga2V5IGlzIGEgY2FsbGVyIGVycm9yLCBub3QgYSBzaWxlbnQgbm8tb3AgXHUyMDE0IHNlZVxuICoge0BsaW5rIHRvS2V5Q29tbWFuZHN9LlxuICovXG5jb25zdCBOQU1FRF9LRVlTID0gbmV3IE1hcDxzdHJpbmcsIE5hbWVkS2V5PihbXG4gIFsnQXJyb3dEb3duJywgeyBjb2RlOiAnQXJyb3dEb3duJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9BUlJPV19ET1dOIH1dLFxuICBbJ0Fycm93TGVmdCcsIHsgY29kZTogJ0Fycm93TGVmdCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfTEVGVCB9XSxcbiAgWydBcnJvd1JpZ2h0JywgeyBjb2RlOiAnQXJyb3dSaWdodCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfUklHSFQgfV0sXG4gIFsnQXJyb3dVcCcsIHsgY29kZTogJ0Fycm93VXAnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0FSUk9XX1VQIH1dLFxuICBbJ0JhY2tzcGFjZScsIHsgY29kZTogJ0JhY2tzcGFjZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQkFDS1NQQUNFIH1dLFxuICBbJ0RlbGV0ZScsIHsgY29kZTogJ0RlbGV0ZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfREVMRVRFIH1dLFxuICBbJ0VudGVyJywgeyBjb2RlOiAnRW50ZXInLCB0ZXh0OiAnXFxyJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9FTlRFUiB9XSxcbiAgWydFc2NhcGUnLCB7IGNvZGU6ICdFc2NhcGUnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0VTQ0FQRSB9XSxcbiAgWydUYWInLCB7IGNvZGU6ICdUYWInLCB0ZXh0OiAnXFx0Jywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9UQUIgfV1cbl0pO1xuXG5jb25zdCBGSVJTVF9DT0RFX1BPSU5UX0lOREVYID0gMDtcbmNvbnN0IERJR0lUX1pFUk9fQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCcwJyk7XG5jb25zdCBESUdJVF9OSU5FX0NPREVfUE9JTlQgPSBjb2RlUG9pbnRPZignOScpO1xuY29uc3QgVVBQRVJDQVNFX0FfQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCdBJyk7XG5jb25zdCBVUFBFUkNBU0VfWl9DT0RFX1BPSU5UID0gY29kZVBvaW50T2YoJ1onKTtcblxuLyoqXG4gKiBUaGUgQ0RQIHNwZWxsaW5nIG9mIG9uZSBuYW1lZCBrZXkuXG4gKi9cbmludGVyZmFjZSBOYW1lZEtleSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dD86IHN0cmluZztcbiAgcmVhZG9ubHkgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBleHByZXNzaW9uIHRoZSBob3N0IGV2YWx1YXRlcyB0byBjbGFpbSBvbmUgaW5wdXQgcmVxdWVzdCBiZWZvcmUgaW5qZWN0aW5nIGl0LlxuICpcbiAqIENEUCBkZWxpdmVycyBgUnVudGltZS5iaW5kaW5nQ2FsbGVkYCB0byAqKmV2ZXJ5KiogYXR0YWNoZWQgc2Vzc2lvbiwgc28gZWFjaCBOb2RlIHByb2Nlc3MgaG9sZGluZyBhblxuICogaW5wdXQgY2hhbm5lbCB0byB0aGlzIFdlYlZpZXcgc2VydmljZXMgdGhlIHNhbWUgcmVxdWVzdCBhbmQgaW5qZWN0cyB0aGUgc2FtZSBnZXN0dXJlLiBUaGUgY2xhaW0gaXNcbiAqIHdoYXQgbWFrZXMgdGhlIGluamVjdGlvbiBleGFjdGx5LW9uY2UgYWNyb3NzIGFsbCBvZiB0aGVtOiB0aGUgcGFnZSBpcyB0aGUgb25seSB0aGluZyBldmVyeSBob3N0XG4gKiBzaGFyZXMsIGFuZCBpdCBydW5zIHRoZSByYWNpbmcgZXZhbHVhdGVzIG9uZSBhZnRlciBhbm90aGVyIG9uIGl0cyBzaW5nbGUgdGhyZWFkLCBzbyBleGFjdGx5IG9uZSBvZlxuICogdGhlbSBnZXRzIGB0cnVlYC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBidWlsZFJlc29sdmVJbnB1dEV4cHJlc3Npb259LCBhbmQgaXQgaXMgd2h5XG4gKiB7QGxpbmsgY2hlY2tJbnB1dENsYWltR3JhbnRlZH0gdHJlYXRzIGEgbm9uLWBmYWxzZWAgcmVzdWx0IGFzIGNsYWltZWQ6IGEgcGFnZSB0aGF0IGhhcyBkcm9wcGVkIHRoZVxuICogbmFtZXNwYWNlIHlpZWxkcyBgdW5kZWZpbmVkYCwgYW5kIGluamVjdGluZyB0d2ljZSBpcyBhIGZhciBiZXR0ZXIgZmFpbHVyZSB0aGFuIG5ldmVyIGluamVjdGluZy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgcmVxdWVzdCBpZCB0byBjbGFpbS5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb24oaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmNsYWltSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0pYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4cHJlc3Npb24gdGhlIGhvc3QgZXZhbHVhdGVzIHRvIGFuc3dlciBvbmUgaW5wdXQgcmVxdWVzdC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyB0aHJvdWdob3V0OiBieSB0aGUgdGltZSB0aGUgaG9zdCBhbnN3ZXJzLCB0aGUgcGFnZSBtYXkgaGF2ZSBuYXZpZ2F0ZWQgYW5kIGRyb3BwZWQgdGhlXG4gKiBuYW1lc3BhY2UsIGFuZCBhIGBUeXBlRXJyb3JgIGluc2lkZSB0aGlzIGV2YWx1YXRlIHdvdWxkIGJlIHJlcG9ydGVkIGFzIGFuIGluamVjdGlvbiBmYWlsdXJlIHRoYXQgYWxyZWFkeVxuICogc3VjY2VlZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSByZXF1ZXN0IGlkIHRoZSByZW5kZXJlciBpcyB3YWl0aW5nIG9uLlxuICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIFdoeSB0aGUgaW5qZWN0aW9uIGZhaWxlZCwgd2hlbiBpdCBkaWQuIE9taXQgb24gc3VjY2Vzcy5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVzb2x2ZUlucHV0RXhwcmVzc2lvbihpZDogc3RyaW5nLCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5yZXNvbHZlSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0sICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JNZXNzYWdlID8/IG51bGwpfSlgO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBmb3Ige0BsaW5rIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb259IGFuZCBzYXlzIHdoZXRoZXIgdG8gaW5qZWN0LlxuICpcbiAqICoqRGVsaWJlcmF0ZWx5IGZhaWxzIE9QRU4uKiogT25seSBhIGxpdGVyYWwgYGZhbHNlYCBcdTIwMTQgdGhlIHBhZ2UgYWN0aXZlbHkgc2F5aW5nIGFub3RoZXIgaG9zdCBhbHJlYWR5XG4gKiBjbGFpbWVkIHRoaXMgaWQgXHUyMDE0IHN0b3BzIHRoZSBpbmplY3Rpb24uIEEgbWlzc2luZyBuYW1lc3BhY2UsIGEgcGFnZSBtaWQtbmF2aWdhdGlvbiwgb3IgYW55IHJlc3VsdFxuICogc2hhcGUgdGhpcyBkb2VzIG5vdCByZWNvZ25pemUgeWllbGRzIGB0cnVlYCwgYmVjYXVzZSBhIGdlc3R1cmUgaW5qZWN0ZWQgdHdpY2UgaXMgYSBmYXIgYmV0dGVyXG4gKiBmYWlsdXJlIHRoYW4gYSBnZXN0dXJlIG5ldmVyIGluamVjdGVkIGF0IGFsbDogdGhlIGZpcnN0IGlzIGEgZG91YmxlZCB0YXAsIHRoZSBzZWNvbmQgaXMgYSB0ZXN0IHRoYXRcbiAqIGhhbmdzIHVudGlsIHRoZSByZW5kZXJlcidzIHRpbWVvdXQgYW5kIHJlcG9ydHMgbm90aGluZyB1c2VmdWwuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByYXcgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBvYmplY3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoaXMgaG9zdCBzaG91bGQgcGVyZm9ybSB0aGUgaW5qZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJbnB1dENsYWltR3JhbnRlZChyZXN1bHQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChyZXN1bHQgYXMgRXZhbHVhdGVSZXN1bHQpLnJlc3VsdD8udmFsdWUgIT09IGZhbHNlO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCBjb2RlIHBvaW50IG9mIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqXG4gKiBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgaXMgdHlwZWQgYG51bWJlciB8IHVuZGVmaW5lZGAsIHNvIGV2ZXJ5IGNhbGwgc2l0ZSB3b3VsZCBvdGhlcndpc2UgY2FycnkgYVxuICogYD8/IGZhbGxiYWNrYCB0aGF0IG5vIGlucHV0IGNhbiBldmVyIHJlYWNoIFx1MjAxNCBhIGRlYWQgYnJhbmNoIHVuZGVyIHRoZSAxMDAlIGNvdmVyYWdlIGdhdGUuIFRocm93aW5nIGhlcmVcbiAqIGtlZXBzIHRoYXQgaW1wb3NzaWJsZSBjYXNlIGluIE9ORSBwbGFjZSwgd2hlcmUgYSB1bml0IHRlc3QgY2FuIHJlYWNoIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIG9mIHNwcmVhZGluZ1xuICogdW5yZWFjaGFibGUgZmFsbGJhY2tzIChvciBjb3ZlcmFnZSBzdXBwcmVzc2lvbnMpIGFjcm9zcyB0aGUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gQSBub24tZW1wdHkgc3RyaW5nLlxuICogQHJldHVybnMgSXRzIGZpcnN0IGNvZGUgcG9pbnQuXG4gKiBAdGhyb3dzIFdoZW4gYHRleHRgIGlzIGVtcHR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZVBvaW50T2YodGV4dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgY29kZVBvaW50ID0gdGV4dC5jb2RlUG9pbnRBdChGSVJTVF9DT0RFX1BPSU5UX0lOREVYKTtcbiAgaWYgKGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb2RlUG9pbnRPZiByZWNlaXZlZCBhbiBlbXB0eSBzdHJpbmcuJyk7XG4gIH1cblxuICByZXR1cm4gY29kZVBvaW50O1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgaW5wdXQgcmVxdWVzdCBpbnRvIHRoZSBvcmRlcmVkIENEUCBjb21tYW5kcyB0aGF0IHJlYWxpemUgaXQuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBXaGF0IHRoZSByZW5kZXJlciBhc2tlZCB0aGUgaG9zdCB0byBpbmplY3QuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NkcElucHV0Q29tbWFuZHMocmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBpZiAocmVxdWVzdC5raW5kID09PSAna2V5Jykge1xuICAgIHJldHVybiB0b0tleUNvbW1hbmRzKHJlcXVlc3QpO1xuICB9XG5cbiAgcmV0dXJuIHRvUG9pbnRlckNvbW1hbmRzKHJlcXVlc3QpO1xufVxuXG4vKipcbiAqIEZvbGRzIHJlc29sdmVkIG1vZGlmaWVyIG5hbWVzIGludG8gQ0RQJ3MgYml0bWFzay5cbiAqXG4gKiBVbmtub3duIG5hbWVzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRocm93aW5nOiB0aGUgcmVuZGVyZXIncyBgdG9FbGVjdHJvbk1vZGlmaWVyc2AgaXMgZXhoYXVzdGl2ZSBvdmVyXG4gKiBPYnNpZGlhbidzIGBNb2RpZmllcmAgdW5pb24sIHNvIGFuIHVua25vd24gbmFtZSBoZXJlIHdvdWxkIG1lYW4gdGhlIHR3byBjb3BpZXMgaGF2ZSBhbHJlYWR5IGRyaWZ0ZWQsIGFuZFxuICogZmFpbGluZyB0aGUgd2hvbGUgZ2VzdHVyZSBpcyBhIHdvcnNlIG91dGNvbWUgdGhhbiBwcmVzc2luZyBpdCB1bm1vZGlmaWVkLlxuICpcbiAqIEBwYXJhbSBtb2RpZmllcnMgLSBSZXNvbHZlZCBsb3dlcmNhc2UgbW9kaWZpZXIgbmFtZXMuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIG1vZGlmaWVyIGJpdG1hc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NkcE1vZGlmaWVycyhtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgLy8gU3VtbWluZyBESVNUSU5DVCBiaXRzIGVxdWFscyBPUi1pbmcgdGhlbSwgYW5kIHRoZSBgU2V0YCBpcyB3aGF0IG1ha2VzIHRoYXQgaG9sZCBldmVuIHdoZW4gYSBjYWxsZXJcbiAgLy8gcGFzc2VzIHRoZSBzYW1lIG1vZGlmaWVyIHR3aWNlIFx1MjAxNCBzbyB0aGUgbWFzayBpcyBidWlsdCB3aXRob3V0IGEgYml0d2lzZSBvcGVyYXRvci5cbiAgY29uc3QgYml0cyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIG1vZGlmaWVycykge1xuICAgIGNvbnN0IGJpdCA9IENEUF9NT0RJRklFUl9CSVRfQllfTkFNRS5nZXQobW9kaWZpZXIpO1xuICAgIGlmIChiaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYml0cy5hZGQoYml0KTtcbiAgICB9XG4gIH1cblxuICBsZXQgYml0bWFzayA9IE5PX01PRElGSUVSUztcbiAgZm9yIChjb25zdCBiaXQgb2YgYml0cykge1xuICAgIGJpdG1hc2sgKz0gYml0O1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hc2s7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBrZXkgbmFtZSB0byBpdHMgQ0RQIHNwZWxsaW5nLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBBIG5hbWVkIGtleSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIENEUCBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUtleShrZXk6IHN0cmluZyk6IE5hbWVkS2V5IHtcbiAgY29uc3QgbmFtZWRLZXkgPSBOQU1FRF9LRVlTLmdldChrZXkpO1xuICBpZiAobmFtZWRLZXkpIHtcbiAgICByZXR1cm4gbmFtZWRLZXk7XG4gIH1cblxuICAvLyBcIkV4YWN0bHkgb25lIGNvZGUgcG9pbnRcIiwgdGVzdGVkIHdpdGhvdXQgc3BsaXR0aW5nIHRoZSBzdHJpbmc6IGBmcm9tQ29kZVBvaW50YCByb3VuZC10cmlwcyBvbmx5IHdoZW5cbiAgLy8gYGtleWAgaXMgdGhhdCBzaW5nbGUgY29kZSBwb2ludCwgc28gYW4gYXN0cmFsLXBsYW5lIGNoYXJhY3RlciBjb3VudHMgYXMgb25lIGFuZCBgJ0N0cmwrSydgIGRvZXMgbm90LlxuICBjb25zdCBjb2RlUG9pbnQgPSBrZXkuY29kZVBvaW50QXQoRklSU1RfQ09ERV9QT0lOVF9JTkRFWCk7XG4gIGlmIChjb2RlUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpICE9PSBrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgcHJlc3NLZXkgcmVjZWl2ZWQgYW4gdW5rbm93biBrZXkgbmFtZSBvbiBtb2JpbGU6ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0uIGBcbiAgICAgICAgKyBgUGFzcyBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Igb25lIG9mOiAke1suLi5OQU1FRF9LRVlTLmtleXMoKV0uam9pbignLCAnKX0uYFxuICAgICk7XG4gIH1cblxuICBjb25zdCB1cHBlckNhc2VkQ29kZVBvaW50ID0gY29kZVBvaW50T2Yoa2V5LnRvVXBwZXJDYXNlKCkpO1xuICByZXR1cm4ge1xuICAgIGNvZGU6IHJlc29sdmVLZXlDb2RlKHVwcGVyQ2FzZWRDb2RlUG9pbnQpLFxuICAgIHRleHQ6IGtleSxcbiAgICB3aW5kb3dzVmlydHVhbEtleUNvZGU6IHVwcGVyQ2FzZWRDb2RlUG9pbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGh5c2ljYWwgYGNvZGVgIGZvciBhIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gKlxuICogQ2hhcmFjdGVycyBvdXRzaWRlIHRoZSBBU0NJSSBsZXR0ZXIvZGlnaXQgcm93cyBoYXZlIG5vIHN0YWJsZSBwaHlzaWNhbCBrZXksIHNvIHRoZXkgZ2V0IGFuIGVtcHR5XG4gKiBgY29kZWAgXHUyMDE0IHRoZSBgdGV4dGAgc3RpbGwgY2FycmllcyB0aGVtLCB3aGljaCBpcyB3aGF0IGFuIGVkaXRvciByZWFkcy5cbiAqXG4gKiBAcGFyYW0gdXBwZXJDYXNlZENvZGVQb2ludCAtIFRoZSBjaGFyYWN0ZXIncyB1cHBlci1jYXNlZCBjb2RlIHBvaW50LlxuICogQHJldHVybnMgVGhlIENEUCBgY29kZWAsIG9yIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZXJlIGlzIG5vIHN0YWJsZSBvbmUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVLZXlDb2RlKHVwcGVyQ2FzZWRDb2RlUG9pbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh1cHBlckNhc2VkQ29kZVBvaW50ID49IFVQUEVSQ0FTRV9BX0NPREVfUE9JTlQgJiYgdXBwZXJDYXNlZENvZGVQb2ludCA8PSBVUFBFUkNBU0VfWl9DT0RFX1BPSU5UKSB7XG4gICAgcmV0dXJuIGBLZXkke1N0cmluZy5mcm9tQ29kZVBvaW50KHVwcGVyQ2FzZWRDb2RlUG9pbnQpfWA7XG4gIH1cblxuICBpZiAodXBwZXJDYXNlZENvZGVQb2ludCA+PSBESUdJVF9aRVJPX0NPREVfUE9JTlQgJiYgdXBwZXJDYXNlZENvZGVQb2ludCA8PSBESUdJVF9OSU5FX0NPREVfUE9JTlQpIHtcbiAgICByZXR1cm4gYERpZ2l0JHtTdHJpbmcuZnJvbUNvZGVQb2ludCh1cHBlckNhc2VkQ29kZVBvaW50KX1gO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBrZXkgcHJlc3MuXG4gKlxuICogTWlycm9ycyB0aGUgZGVza3RvcCB0d2luJ3MgdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBpbiBDRFAncyBzcGVsbGluZzogYHJhd0tleURvd25gIGZpcmVzXG4gKiBga2V5ZG93bmAgYWxvbmUsIGBjaGFyYCBmaXJlcyBga2V5cHJlc3NgIC8gYGJlZm9yZWlucHV0YCAvIGBpbnB1dGAsIGBrZXlVcGAgZmlyZXMgYGtleXVwYC4gQSBrZXkgdGhhdFxuICogcHJvZHVjZXMgbm8gdGV4dCAoYEVzY2FwZWApIHNraXBzIHRoZSBgY2hhcmAsIGV4YWN0bHkgYXMgYSByZWFsIG9uZSBkb2VzLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIGtleSByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b0tleUNvbW1hbmRzKHJlcXVlc3Q6IE1vYmlsZUtleUlucHV0UmVxdWVzdCk6IENkcElucHV0Q29tbWFuZFtdIHtcbiAgY29uc3QgeyBjb2RlLCB0ZXh0LCB3aW5kb3dzVmlydHVhbEtleUNvZGUgfSA9IHJlc29sdmVLZXkocmVxdWVzdC5rZXkpO1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG4gIGNvbnN0IGJhc2UgPSB7IGNvZGUsIGtleTogcmVxdWVzdC5rZXksIG1vZGlmaWVycywgd2luZG93c1ZpcnR1YWxLZXlDb2RlIH07XG5cbiAgY29uc3QgY29tbWFuZHM6IENkcElucHV0Q29tbWFuZFtdID0gW1xuICAgIHsgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCcsIHBhcmFtczogeyAuLi5iYXNlLCB0eXBlOiAncmF3S2V5RG93bicgfSB9XG4gIF07XG5cbiAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbW1hbmRzLnB1c2goeyBtZXRob2Q6ICdJbnB1dC5kaXNwYXRjaEtleUV2ZW50JywgcGFyYW1zOiB7IC4uLmJhc2UsIHRleHQsIHR5cGU6ICdjaGFyJyB9IH0pO1xuICB9XG5cbiAgY29tbWFuZHMucHVzaCh7IG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoS2V5RXZlbnQnLCBwYXJhbXM6IHsgLi4uYmFzZSwgdHlwZTogJ2tleVVwJyB9IH0pO1xuXG4gIHJldHVybiBjb21tYW5kcztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgdGFwIG9yIGEgbG9uZy1wcmVzcy5cbiAqXG4gKiAqKlRoZSB0d28gZ2VzdHVyZXMgdGFrZSBkaWZmZXJlbnQgQ0RQIHJvdXRlcywgYW5kIHRoYXQgYXN5bW1ldHJ5IGlzIHRoZSB3aG9sZSBwb2ludC4qKlxuICpcbiAqIEEgdGFwIGlzIGEgdHJ1c3RlZCB0b3VjaCBwYWlyLCB3aGljaCBpcyBhbGwgQ2hyb21pdW0gbmVlZHMgXHUyMDE0IGl0IHN5bnRoZXNpemVzIGBwb2ludGVyZG93bmAgL1xuICogYHRvdWNoc3RhcnRgIC8gYHBvaW50ZXJ1cGAgLyBgdG91Y2hlbmRgIC8gYGNsaWNrYCBmcm9tIGl0LCBldmVyeSBvbmUgYGlzVHJ1c3RlZGAuIFRoZSByZWxlYXNlIGNhcnJpZXNcbiAqIGFuIGVtcHR5IGB0b3VjaFBvaW50c2AgbGlzdCwgd2hpY2ggaXMgQ0RQJ3Mgc3BlbGxpbmcgZm9yIFwiYWxsIGZpbmdlcnMgbGlmdGVkXCIuXG4gKlxuICogQSBsb25nLXByZXNzIGNhbm5vdCBiZSB0aGF0IHNhbWUgcGFpciBoZWxkIGFwYXJ0IGJ5IGEgZHdlbGwsIGJlY2F1c2UgYElucHV0LmRpc3BhdGNoVG91Y2hFdmVudGAgaW5qZWN0c1xuICogYSBgV2ViVG91Y2hFdmVudGAgKipwYXN0KiogQW5kcm9pZCdzIGdlc3R1cmUgcmVjb2duaXplcjogbm8gcmVjb2duaXplciBzZWVzIHRoZSBob2xkLCBzbyBubyBsb25nLXByZXNzXG4gKiBnZXN0dXJlIGlzIGV2ZXIgcHJvZHVjZWQgYW5kIHRoZSBwYWlyIGlzIGNsYXNzaWZpZWQgYXMgYSB0YXAgaG93ZXZlciBsb25nIHRoZSBkd2VsbCBpcy5cbiAqIGBJbnB1dC5zeW50aGVzaXplVGFwR2VzdHVyZWAgaW5zdGVhZCBnb2VzIHRocm91Z2ggQ2hyb21pdW0ncyBzeW50aGV0aWMtZ2VzdHVyZSBjb250cm9sbGVyLCB3aGljaCBidWlsZHNcbiAqIHJlYWwgYE1vdGlvbkV2ZW50YHMgYW5kIGZlZWRzIHRoZW0gdG8gdGhlIHBsYXRmb3JtIHJlY29nbml6ZXIgXHUyMDE0IHRoZSBzdGVwIHRoZSBkaXNwYXRjaCByb3V0ZSBza2lwcy5cbiAqXG4gKiBNZWFzdXJlZCBvbiBhIGxpdmUgZW11bGF0b3IgKDIwMjYtMDktMDgpOiB0aGUgZGlzcGF0Y2ggcGFpciB3aXRoIGEgNjAwbXMgZHdlbGwsIGFpbWVkIGF0IGEgKipyZWFsKipcbiAqIGAubmF2LWZpbGUtdGl0bGVgIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBwcm9kdWNlZCBgcG9pbnRlcmRvd25gIC8gYHRvdWNoc3RhcnRgIC8gYHRvdWNoZW5kYCAvIGBjbGlja2AgYW5kXG4gKiAqKm9wZW5lZCB0aGUgbm90ZSoqIFx1MjAxNCBhIHRhcC4gTm8gYGNvbnRleHRtZW51YCwgYW5kIG5vIE9ic2lkaWFuIG1lbnUuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcG9pbnRlciByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b1BvaW50ZXJDb21tYW5kcyhyZXF1ZXN0OiBNb2JpbGVQb2ludGVySW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG5cbiAgaWYgKHJlcXVlc3Qua2luZCA9PT0gJ2xvbmdQcmVzcycpIHtcbiAgICAvLyBgc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRha2VzIG5vIG1vZGlmaWVyIGJpdG1hc2sgXHUyMDE0IENEUCdzIGdlc3R1cmUgQVBJIGhhcyBubyBwYXJhbWV0ZXIgZm9yIG9uZSBcdTIwMTQgYW5kXG4gICAgLy8gQSB0b3VjaCBzY3JlZW4gaGFzIG5vIG1vZGlmaWVyIGtleXMgdG8gaG9sZCBkdXJpbmcgYSBwcmVzcywgc28gdGhlcmUgaXMgbm90aGluZyB0byBjYXJyeSBoZXJlLlxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0lucHV0LnN5bnRoZXNpemVUYXBHZXN0dXJlJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZHVyYXRpb246IExPTkdfUFJFU1NfRFdFTExfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIGdlc3R1cmVTb3VyY2VUeXBlOiAndG91Y2gnLFxuICAgICAgICAgIHg6IHJlcXVlc3QueCxcbiAgICAgICAgICB5OiByZXF1ZXN0LnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoVG91Y2hFdmVudCcsXG4gICAgICBwYXJhbXM6IHsgbW9kaWZpZXJzLCB0b3VjaFBvaW50czogW3sgeDogcmVxdWVzdC54LCB5OiByZXF1ZXN0LnkgfV0sIHR5cGU6ICd0b3VjaFN0YXJ0JyB9XG4gICAgfSxcbiAgICB7XG4gICAgICBtZXRob2Q6ICdJbnB1dC5kaXNwYXRjaFRvdWNoRXZlbnQnLFxuICAgICAgcGFyYW1zOiB7IG1vZGlmaWVycywgdG91Y2hQb2ludHM6IFtdLCB0eXBlOiAndG91Y2hFbmQnIH1cbiAgICB9XG4gIF07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQk8sTUFBTSw0QkFBNEI7QUFTbEMsTUFBTSx1Q0FBdUM7QUE4SHBELE1BQU0sbUNBQW1DO0FBRXpDLE1BQU0sZUFBZTtBQUNyQixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHFCQUFxQjtBQU8zQixNQUFNLDJCQUEyQixvQkFBSSxJQUFvQjtBQUFBLEVBQ3ZELENBQUMsT0FBTyxnQkFBZ0I7QUFBQSxFQUN4QixDQUFDLFdBQVcsb0JBQW9CO0FBQUEsRUFDaEMsQ0FBQyxRQUFRLGlCQUFpQjtBQUFBLEVBQzFCLENBQUMsU0FBUyxrQkFBa0I7QUFDOUIsQ0FBQztBQUVELE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGtCQUFrQjtBQVN4QixNQUFNLGFBQWEsb0JBQUksSUFBc0I7QUFBQSxFQUMzQyxDQUFDLGFBQWEsRUFBRSxNQUFNLGFBQWEsdUJBQXVCLG9CQUFvQixDQUFDO0FBQUEsRUFDL0UsQ0FBQyxhQUFhLEVBQUUsTUFBTSxhQUFhLHVCQUF1QixvQkFBb0IsQ0FBQztBQUFBLEVBQy9FLENBQUMsY0FBYyxFQUFFLE1BQU0sY0FBYyx1QkFBdUIscUJBQXFCLENBQUM7QUFBQSxFQUNsRixDQUFDLFdBQVcsRUFBRSxNQUFNLFdBQVcsdUJBQXVCLGtCQUFrQixDQUFDO0FBQUEsRUFDekUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxhQUFhLHVCQUF1QixtQkFBbUIsQ0FBQztBQUFBLEVBQzlFLENBQUMsVUFBVSxFQUFFLE1BQU0sVUFBVSx1QkFBdUIsZ0JBQWdCLENBQUM7QUFBQSxFQUNyRSxDQUFDLFNBQVMsRUFBRSxNQUFNLFNBQVMsTUFBTSxNQUFNLHVCQUF1QixlQUFlLENBQUM7QUFBQSxFQUM5RSxDQUFDLFVBQVUsRUFBRSxNQUFNLFVBQVUsdUJBQXVCLGdCQUFnQixDQUFDO0FBQUEsRUFDckUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxPQUFPLE1BQU0sS0FBTSx1QkFBdUIsYUFBYSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLHlCQUF5QjtBQUMvQixNQUFNLHdCQUF3QixZQUFZLEdBQUc7QUFDN0MsTUFBTSx3QkFBd0IsWUFBWSxHQUFHO0FBQzdDLE1BQU0seUJBQXlCLFlBQVksR0FBRztBQUM5QyxNQUFNLHlCQUF5QixZQUFZLEdBQUc7QUEyQnZDLFNBQVMsMEJBQTBCLElBQW9CO0FBQzVELFNBQU8scURBQXFELEtBQUssVUFBVSxFQUFFLENBQUM7QUFDaEY7QUFhTyxTQUFTLDRCQUE0QixJQUFZLGNBQStCO0FBQ3JGLFNBQU8sdURBQXVELEtBQUssVUFBVSxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsZ0JBQWdCLElBQUksQ0FBQztBQUMzSDtBQWNPLFNBQVMsdUJBQXVCLFFBQTBCO0FBQy9ELE1BQUksT0FBTyxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBUSxPQUEwQixRQUFRLFVBQVU7QUFDdEQ7QUFjTyxTQUFTLFlBQVksTUFBc0I7QUFDaEQsUUFBTSxZQUFZLEtBQUssWUFBWSxzQkFBc0I7QUFDekQsTUFBSSxjQUFjLFFBQVc7QUFDM0IsVUFBTSxJQUFJLE1BQU0sdUNBQXVDO0FBQUEsRUFDekQ7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLG1CQUFtQixTQUFnRDtBQUNqRixNQUFJLFFBQVEsU0FBUyxPQUFPO0FBQzFCLFdBQU8sY0FBYyxPQUFPO0FBQUEsRUFDOUI7QUFFQSxTQUFPLGtCQUFrQixPQUFPO0FBQ2xDO0FBWU8sU0FBUyxlQUFlLFdBQXNDO0FBR25FLFFBQU0sT0FBTyxvQkFBSSxJQUFZO0FBQzdCLGFBQVcsWUFBWSxXQUFXO0FBQ2hDLFVBQU0sTUFBTSx5QkFBeUIsSUFBSSxRQUFRO0FBQ2pELFFBQUksUUFBUSxRQUFXO0FBQ3JCLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDZDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFVBQVU7QUFDZCxhQUFXLE9BQU8sTUFBTTtBQUN0QixlQUFXO0FBQUEsRUFDYjtBQUVBLFNBQU87QUFDVDtBQVFBLFNBQVMsV0FBVyxLQUF1QjtBQUN6QyxRQUFNLFdBQVcsV0FBVyxJQUFJLEdBQUc7QUFDbkMsTUFBSSxVQUFVO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFJQSxRQUFNLFlBQVksSUFBSSxZQUFZLHNCQUFzQjtBQUN4RCxNQUFJLGNBQWMsVUFBYSxPQUFPLGNBQWMsU0FBUyxNQUFNLEtBQUs7QUFDdEUsVUFBTSxJQUFJO0FBQUEsTUFDUixvREFBb0QsS0FBSyxVQUFVLEdBQUcsQ0FBQyx3Q0FDN0IsQ0FBQyxHQUFHLFdBQVcsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUM3RTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLHNCQUFzQixZQUFZLElBQUksWUFBWSxDQUFDO0FBQ3pELFNBQU87QUFBQSxJQUNMLE1BQU0sZUFBZSxtQkFBbUI7QUFBQSxJQUN4QyxNQUFNO0FBQUEsSUFDTix1QkFBdUI7QUFBQSxFQUN6QjtBQUNGO0FBV0EsU0FBUyxlQUFlLHFCQUFxQztBQUMzRCxNQUFJLHVCQUF1QiwwQkFBMEIsdUJBQXVCLHdCQUF3QjtBQUNsRyxXQUFPLE1BQU0sT0FBTyxjQUFjLG1CQUFtQixDQUFDO0FBQUEsRUFDeEQ7QUFFQSxNQUFJLHVCQUF1Qix5QkFBeUIsdUJBQXVCLHVCQUF1QjtBQUNoRyxXQUFPLFFBQVEsT0FBTyxjQUFjLG1CQUFtQixDQUFDO0FBQUEsRUFDMUQ7QUFFQSxTQUFPO0FBQ1Q7QUFZQSxTQUFTLGNBQWMsU0FBbUQ7QUFDeEUsUUFBTSxFQUFFLE1BQU0sTUFBTSxzQkFBc0IsSUFBSSxXQUFXLFFBQVEsR0FBRztBQUNwRSxRQUFNLFlBQVksZUFBZSxRQUFRLFNBQVM7QUFDbEQsUUFBTSxPQUFPLEVBQUUsTUFBTSxLQUFLLFFBQVEsS0FBSyxXQUFXLHNCQUFzQjtBQUV4RSxRQUFNLFdBQThCO0FBQUEsSUFDbEMsRUFBRSxRQUFRLDBCQUEwQixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sYUFBYSxFQUFFO0FBQUEsRUFDOUU7QUFFQSxNQUFJLFNBQVMsUUFBVztBQUN0QixhQUFTLEtBQUssRUFBRSxRQUFRLDBCQUEwQixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzdGO0FBRUEsV0FBUyxLQUFLLEVBQUUsUUFBUSwwQkFBMEIsUUFBUSxFQUFFLEdBQUcsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO0FBRXRGLFNBQU87QUFDVDtBQXdCQSxTQUFTLGtCQUFrQixTQUF1RDtBQUNoRixRQUFNLFlBQVksZUFBZSxRQUFRLFNBQVM7QUFFbEQsTUFBSSxRQUFRLFNBQVMsYUFBYTtBQUdoQyxXQUFPO0FBQUEsTUFDTDtBQUFBLFFBQ0UsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFVBQ04sVUFBVTtBQUFBLFVBQ1YsbUJBQW1CO0FBQUEsVUFDbkIsR0FBRyxRQUFRO0FBQUEsVUFDWCxHQUFHLFFBQVE7QUFBQSxRQUNiO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxNQUNFLFFBQVE7QUFBQSxNQUNSLFFBQVEsRUFBRSxXQUFXLGFBQWEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxNQUFNLGFBQWE7QUFBQSxJQUN6RjtBQUFBLElBQ0E7QUFBQSxNQUNFLFFBQVE7QUFBQSxNQUNSLFFBQVEsRUFBRSxXQUFXLGFBQWEsQ0FBQyxHQUFHLE1BQU0sV0FBVztBQUFBLElBQ3pEO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vYmlsZS1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgdHJ1c3RlZC1pbnB1dCByZXF1ZXN0IGludG8gdGhlIG9yZGVyZWQgQ2hyb21lIERldlRvb2xzIFByb3RvY29sIGBJbnB1dC4qYCBjb21tYW5kc1xuICogdGhhdCByZWFsaXplIGl0IChzZWUgKipMMzkqKikuXG4gKlxuICogUHVyZSBhbmQgc3luY2hyb25vdXMgYnkgZGVzaWduOiB0aGUgV2ViVmlldyBjb25uZWN0aW9uICh7QGxpbmsgV2ViVmlld0NkcENvbm5lY3Rpb259KSBzZW5kcyB3aGF0ZXZlciB0aGlzXG4gKiByZXR1cm5zLCBzbyBldmVyeSBkZWNpc2lvbiB0aGF0IGlzIHdvcnRoIGEgdGVzdCBcdTIwMTQgdGhlIHRvdWNoIHBhaXIgYSB0YXAgZXhwYW5kcyBpbnRvLCB0aGUgZHdlbGwgYVxuICogbG9uZy1wcmVzcyBhZGRzLCB0aGUgYHJhd0tleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2hhcGUgYSBrZXkgcHJlc3MgbWlycm9ycyBmcm9tIHRoZSBkZXNrdG9wIHR3aW4sIHRoZVxuICogbW9kaWZpZXIgYml0bWFzayBcdTIwMTQgbGl2ZXMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIHRyYW5zcG9ydCdzIEkvTyBwYXRoLlxuICpcbiAqIFRoZSByZXF1ZXN0IHRyYXZlbHMgcmVuZGVyZXIgXHUyMTkyIGhvc3QgYXMgSlNPTiAodGhlIHJlbmRlcmVyIGNvbXB1dGVzIHRoZSBjb29yZGluYXRlcywgYmVjYXVzZSBvbmx5IGl0IGNhblxuICogc2VlIHRoZSBET00pLCBzbyBib3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgY29tbWFuZCBzaGFwZXMgYXJlIGRlbGliZXJhdGVseSBwbGFpbiBkYXRhLlxuICovXG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGBSdW50aW1lLmFkZEJpbmRpbmdgIGZ1bmN0aW9uIHRoZSBob3N0IGV4cG9zZXMgb24gdGhlIHBhZ2Ugc28gdGhlIHJlbmRlcmVyIGNhbiBoYW5kIGl0IGFuXG4gKiBpbnB1dCByZXF1ZXN0IG1pZC1jbG9zdXJlLlxuICpcbiAqIEl0IGlzIHBhc3NlZCAqaW50byogdGhlIHNlcmlhbGl6ZWQgYm9vdHN0cmFwIGNsb3N1cmUgYXMgZGF0YSByYXRoZXIgdGhhbiByZWZlcmVuY2VkIGZyb20gaXQsIGJlY2F1c2UgdGhhdFxuICogY2xvc3VyZSBtYXkgbm90IHJlYWQgb3V0ZXIgc2NvcGUgKCoqTDE1KiopIFx1MjAxNCBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUUgPSAnX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0lucHV0JztcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgcmVuZGVyZXIgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHNlcnZpY2Ugb25lIGlucHV0IHJlcXVlc3QgYmVmb3JlIGdpdmluZyB1cC5cbiAqXG4gKiBHZW5lcm91cyByZWxhdGl2ZSB0byB0aGUgd29yayAoYSB0YXAgaXMgdHdvIENEUCBjb21tYW5kczsgYSBsb25nLXByZXNzIGFkZHMgYSA2MDBtcyBkd2VsbCk6IHRoZSBwb2ludCBpc1xuICogdG8gZmFpbCB3aXRoIGEgbGVnaWJsZSBlcnJvciByYXRoZXIgdGhhbiBoYW5nIHRoZSBjbG9zdXJlIHVudGlsIHRoZSB3aG9sZSBydW4gdGltZXMgb3V0LiBQYXNzZWQgaW50byB0aGVcbiAqIGJvb3RzdHJhcCBjbG9zdXJlIGFzIGRhdGEsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUV9LlxuICovXG5leHBvcnQgY29uc3QgTU9CSUxFX0lOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTVfMDAwO1xuXG4vKipcbiAqIEEgc2luZ2xlIENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb21tYW5kLlxuICpcbiAqIEl0IG9uY2UgYWxzbyBjYXJyaWVkIGEgYGRlbGF5QmVmb3JlSW5NaWxsaXNlY29uZHNgLCBzbyB0aGUgaG9zdCB3b3VsZCBzbGVlcCBiZXR3ZWVuIHRoZSB0d28gaGFsdmVzIG9mIGFcbiAqIGxvbmctcHJlc3MuIFRoYXQgZHdlbGwgaXMgZ29uZTogdGhlIGdlc3R1cmUgaXMgbm93IG9uZSBgSW5wdXQuc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRoYXQgaG9sZHMgaXRzZWxmXG4gKiBmb3IgaXRzIG93biBgZHVyYXRpb25gLCBzbyBubyBjb21tYW5kIGluIGFueSBzZXF1ZW5jZSBuZWVkcyB0byBiZSBzcGFjZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBpdCwgYW5kIGFcbiAqIGtub2Igbm90aGluZyBzZXRzIGlzIHdvcnNlIHRoYW4gbm8ga25vYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBJbnB1dENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIENEUCBtZXRob2QgbmFtZSwgZS5nLiBgSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSByZW5kZXJlciBoYW5kcyB0byB0aGUgaG9zdCBiaW5kaW5nOiBvbmUgcmVxdWVzdCwgcGx1cyB0aGUgaWQgdG8gYW5zd2VyIGl0IG9uLlxuICpcbiAqIFRoZSByZW5kZXJlciBidWlsZHMgdGhpcyBsaXRlcmFsIGluc2lkZSB0aGUgc2VyaWFsaXplZCBib290c3RyYXAgY2xvc3VyZSwgd2hpY2ggY2Fubm90IGltcG9ydCAoKipMMTUqKiksXG4gKiBzbyB0aGUgc2hhcGUgaXMgZGVjbGFyZWQgaGVyZSBhbmQgbWlycm9yZWQgdGhlcmUuIFRoZXkgYXJlIG9uZSB3aXJlIGZvcm1hdDsgY2hhbmdlIHRoZW0gdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlSW5wdXRFbnZlbG9wZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZCB0aGUgcmVuZGVyZXIgaXMgd2FpdGluZyBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdG8gaW5qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0O1xufVxuXG4vKipcbiAqIEFueXRoaW5nIHRoZSByZW5kZXJlciBjYW4gYXNrIHRoZSBob3N0IHRvIGluamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgTW9iaWxlSW5wdXRSZXF1ZXN0ID0gTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHwgTW9iaWxlUG9pbnRlcklucHV0UmVxdWVzdDtcblxuLyoqXG4gKiBBIHRydXN0ZWQga2V5IHByZXNzIHRvIGluamVjdCBvbiBtb2JpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGluIHRoZSBzYW1lIHNwZWxsaW5nIHRoZSBkZXNrdG9wIHR3aW4gdGFrZXM6IGVpdGhlciBhIG5hbWVkIGtleVxuICAgKiAoYEVudGVyYCwgYEVzY2FwZWAsIGBUYWJgLCBgQmFja3NwYWNlYCwgYERlbGV0ZWAsIGFuIGFycm93KSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdrZXknO1xuXG4gIC8qKlxuICAgKiBNb2RpZmllcnMgYWxyZWFkeSByZXNvbHZlZCB0byB0aGVpciBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb3dlcmNhc2UgbmFtZXMgYnkgdGhlIHJlbmRlcmVyJ3NcbiAgICogYHRvRWxlY3Ryb25Nb2RpZmllcnNgIFx1MjAxNCB0aGUgb25lIG1hcHBpbmcgYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgc2hhcmUsIHNvIGAnTW9kJ2AgY2Fubm90IG1lYW4gdHdvXG4gICAqIGRpZmZlcmVudCB0aGluZ3MgKCoqTDE3KiopLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIHRydXN0ZWQgcG9pbnRlciBnZXN0dXJlIHRvIGluamVjdCBvbiBtb2JpbGUsIGluIENTUyBwaXhlbHMgd2l0aGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0LlxuICpcbiAqIE5vIGRldmljZS1waXhlbCBjb252ZXJzaW9uIGlzIGludm9sdmVkOiBDRFAgdGFrZXMgcGFnZSBjb29yZGluYXRlcywgc28gYGRldmljZVBpeGVsUmF0aW9gIGFuZCB0aGVcbiAqIFdlYlZpZXcncyBvZmZzZXQgdW5kZXIgdGhlIHN0YXR1cyBiYXIgbmV2ZXIgZW50ZXIgdGhlIHBpY3R1cmUgKHRoZXkgd291bGQgZm9yIG5hdGl2ZSBpbmplY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vYmlsZVBvaW50ZXJJbnB1dFJlcXVlc3Qge1xuICAvKipcbiAgICogYHRhcGAgaXMgdGhlIHRvdWNoIGFuYWxvZyBvZiBhIGxlZnQgY2xpY2s7IGBsb25nUHJlc3NgIGlzIHRoZSBtb2JpbGUgY29udGV4dC1tZW51IGdlc3R1cmUsIGkuZS4gd2hhdCBhXG4gICAqIGRlc2t0b3AgcmlnaHQgY2xpY2sgbWVhbnMgaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdsb25nUHJlc3MnIHwgJ3RhcCc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0Lm1vZGlmaWVyc30uXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeCBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeSBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBDRFAgYFJlbW90ZU9iamVjdGAgYW4gZXZhbHVhdGUgcmV0dXJucywgcmVkdWNlZCB0byB0aGUgb25lIGZpZWxkIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgRXZhbHVhdGVSZW1vdGVPYmplY3Qge1xuICByZWFkb25seSB2YWx1ZT86IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYSBDRFAgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlcGx5IHRoaXMgbW9kdWxlIHJlYWRzLlxuICpcbiAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGltcG9ydGVkOiB0aGUgaGFybmVzcyB0YWxrcyB0byB0aGUgV2ViVmlldyBkZWJ1Z2dlciBvdmVyIGEgcmF3IHNvY2tldCwgc28gdGhlcmVcbiAqIGlzIG5vIGdlbmVyYXRlZCBwcm90b2NvbCB0eXBlIHRvIHJlYWNoIGZvciwgYW5kIG9ubHkgdGhlIHJldHVybmVkIHZhbHVlIG1hdHRlcnMgaGVyZS5cbiAqL1xuaW50ZXJmYWNlIEV2YWx1YXRlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcmVzdWx0PzogRXZhbHVhdGVSZW1vdGVPYmplY3Q7XG59XG5cbi8qKlxuICogSG93IGxvbmcgYSBsb25nLXByZXNzIGhvbGRzIHRoZSB0b3VjaCBkb3duIGJlZm9yZSByZWxlYXNpbmcgaXQuXG4gKlxuICogSXQgaGFzIHRvIGNsZWFyICoqQW5kcm9pZCdzKiogbG9uZy1wcmVzcyB0aHJlc2hvbGQsIHdoaWNoIGlzIDUwMG1zIGJ5IGRlZmF1bHQ6IHRoZSBnZXN0dXJlIGlzXG4gKiByZWNvZ25pemVkIGJ5IHRoZSBwbGF0Zm9ybSwgYW5kIHRoZSBgY29udGV4dG1lbnVgIE9ic2lkaWFuJ3MgbWVudXMgaGFuZyBvZmYgaXMgd2hhdCB0aGUgcmVjb2duaXplclxuICogZW1pdHMuIDYwMG1zIGNsZWFycyB0aGF0IHdpdGggbWFyZ2luIHdpdGhvdXQgbWFraW5nIGV2ZXJ5IGxvbmctcHJlc3MgdGVzdCBub3RpY2VhYmx5IHNsb3dlci5cbiAqXG4gKiBUaGlzIGNvcnJlY3RzIHRoZSBmb3JtZXIgcmVhZGluZyBcdTIwMTQgdGhhdCBPYnNpZGlhbiBNb2JpbGUgaW1wbGVtZW50cyBsb25nLXByZXNzIGl0c2VsZiwgb24gYSBKYXZhU2NyaXB0XG4gKiBgdG91Y2hzdGFydGAgdGltZXIsIHNvIHRoZSBkd2VsbCBvbmx5IGhhZCB0byBjbGVhciAqaXRzKiB0aHJlc2hvbGQuIE1lYXN1cmVkIGFnYWluc3QgYSByZWFsXG4gKiBgLm5hdi1maWxlLXRpdGxlYCwgYSA2MDBtcyBkd2VsbCBiZXR3ZWVuIHR3byBkaXNwYXRjaGVkIHRvdWNoZXMgb3BlbmVkIHRoZSBub3RlIGluc3RlYWQgb2YgaXRzIG1lbnU7XG4gKiBzZWUge0BsaW5rIHRvUG9pbnRlckNvbW1hbmRzfSBmb3Igd2h5IHRoZSBkd2VsbCBhbG9uZSB3YXMgbmV2ZXIgZ29pbmcgdG8gYmUgZW5vdWdoLlxuICovXG5jb25zdCBMT05HX1BSRVNTX0RXRUxMX0lOX01JTExJU0VDT05EUyA9IDYwMDtcblxuY29uc3QgTk9fTU9ESUZJRVJTID0gMDtcbmNvbnN0IE1PRElGSUVSX0JJVF9BTFQgPSAxO1xuY29uc3QgTU9ESUZJRVJfQklUX0NPTlRST0wgPSAyO1xuY29uc3QgTU9ESUZJRVJfQklUX01FVEEgPSA0O1xuY29uc3QgTU9ESUZJRVJfQklUX1NISUZUID0gODtcblxuLyoqXG4gKiBDRFAncyBtb2RpZmllciBiaXRtYXNrLCB3aGljaCBpcyBub3QgdGhlIHNhbWUgc3BlbGxpbmcgYXMgRWxlY3Ryb24ncyBzdHJpbmcgbGlzdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC90b3QvSW5wdXQvI21ldGhvZC1kaXNwYXRjaEtleUV2ZW50fVxuICovXG5jb25zdCBDRFBfTU9ESUZJRVJfQklUX0JZX05BTUUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXG4gIFsnYWx0JywgTU9ESUZJRVJfQklUX0FMVF0sXG4gIFsnY29udHJvbCcsIE1PRElGSUVSX0JJVF9DT05UUk9MXSxcbiAgWydtZXRhJywgTU9ESUZJRVJfQklUX01FVEFdLFxuICBbJ3NoaWZ0JywgTU9ESUZJRVJfQklUX1NISUZUXVxuXSk7XG5cbmNvbnN0IEtFWV9DT0RFX0JBQ0tTUEFDRSA9IDg7XG5jb25zdCBLRVlfQ09ERV9UQUIgPSA5O1xuY29uc3QgS0VZX0NPREVfRU5URVIgPSAxMztcbmNvbnN0IEtFWV9DT0RFX0VTQ0FQRSA9IDI3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfTEVGVCA9IDM3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfVVAgPSAzODtcbmNvbnN0IEtFWV9DT0RFX0FSUk9XX1JJR0hUID0gMzk7XG5jb25zdCBLRVlfQ09ERV9BUlJPV19ET1dOID0gNDA7XG5jb25zdCBLRVlfQ09ERV9ERUxFVEUgPSA0NjtcblxuLyoqXG4gKiBOYW1lZCBrZXlzLCB3aXRoIHRoZSBgdGV4dGAgYSByZWFsIGtleSBwcmVzcyB3b3VsZCBwcm9kdWNlIChhYnNlbnQgd2hlbiBpdCBwcm9kdWNlcyBub25lKS5cbiAqXG4gKiBPbmx5IGtleXMgdGhlc2Ugc3VpdGVzIGFjdHVhbGx5IHByZXNzIGFyZSBsaXN0ZWQsIHBsdXMgdGhlIGVkaXRpbmcga2V5cyBhIGNhbGxlciB3b3VsZCByZWFzb25hYmx5IHJlYWNoXG4gKiBmb3IgbmV4dC4gQW4gdW5rbm93biBtdWx0aS1jaGFyYWN0ZXIga2V5IGlzIGEgY2FsbGVyIGVycm9yLCBub3QgYSBzaWxlbnQgbm8tb3AgXHUyMDE0IHNlZVxuICoge0BsaW5rIHRvS2V5Q29tbWFuZHN9LlxuICovXG5jb25zdCBOQU1FRF9LRVlTID0gbmV3IE1hcDxzdHJpbmcsIE5hbWVkS2V5PihbXG4gIFsnQXJyb3dEb3duJywgeyBjb2RlOiAnQXJyb3dEb3duJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9BUlJPV19ET1dOIH1dLFxuICBbJ0Fycm93TGVmdCcsIHsgY29kZTogJ0Fycm93TGVmdCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfTEVGVCB9XSxcbiAgWydBcnJvd1JpZ2h0JywgeyBjb2RlOiAnQXJyb3dSaWdodCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfUklHSFQgfV0sXG4gIFsnQXJyb3dVcCcsIHsgY29kZTogJ0Fycm93VXAnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0FSUk9XX1VQIH1dLFxuICBbJ0JhY2tzcGFjZScsIHsgY29kZTogJ0JhY2tzcGFjZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQkFDS1NQQUNFIH1dLFxuICBbJ0RlbGV0ZScsIHsgY29kZTogJ0RlbGV0ZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfREVMRVRFIH1dLFxuICBbJ0VudGVyJywgeyBjb2RlOiAnRW50ZXInLCB0ZXh0OiAnXFxyJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9FTlRFUiB9XSxcbiAgWydFc2NhcGUnLCB7IGNvZGU6ICdFc2NhcGUnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0VTQ0FQRSB9XSxcbiAgWydUYWInLCB7IGNvZGU6ICdUYWInLCB0ZXh0OiAnXFx0Jywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9UQUIgfV1cbl0pO1xuXG5jb25zdCBGSVJTVF9DT0RFX1BPSU5UX0lOREVYID0gMDtcbmNvbnN0IERJR0lUX1pFUk9fQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCcwJyk7XG5jb25zdCBESUdJVF9OSU5FX0NPREVfUE9JTlQgPSBjb2RlUG9pbnRPZignOScpO1xuY29uc3QgVVBQRVJDQVNFX0FfQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCdBJyk7XG5jb25zdCBVUFBFUkNBU0VfWl9DT0RFX1BPSU5UID0gY29kZVBvaW50T2YoJ1onKTtcblxuLyoqXG4gKiBUaGUgQ0RQIHNwZWxsaW5nIG9mIG9uZSBuYW1lZCBrZXkuXG4gKi9cbmludGVyZmFjZSBOYW1lZEtleSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dD86IHN0cmluZztcbiAgcmVhZG9ubHkgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBleHByZXNzaW9uIHRoZSBob3N0IGV2YWx1YXRlcyB0byBjbGFpbSBvbmUgaW5wdXQgcmVxdWVzdCBiZWZvcmUgaW5qZWN0aW5nIGl0LlxuICpcbiAqIENEUCBkZWxpdmVycyBgUnVudGltZS5iaW5kaW5nQ2FsbGVkYCB0byAqKmV2ZXJ5KiogYXR0YWNoZWQgc2Vzc2lvbiwgc28gZWFjaCBOb2RlIHByb2Nlc3MgaG9sZGluZyBhblxuICogaW5wdXQgY2hhbm5lbCB0byB0aGlzIFdlYlZpZXcgc2VydmljZXMgdGhlIHNhbWUgcmVxdWVzdCBhbmQgaW5qZWN0cyB0aGUgc2FtZSBnZXN0dXJlLiBUaGUgY2xhaW0gaXNcbiAqIHdoYXQgbWFrZXMgdGhlIGluamVjdGlvbiBleGFjdGx5LW9uY2UgYWNyb3NzIGFsbCBvZiB0aGVtOiB0aGUgcGFnZSBpcyB0aGUgb25seSB0aGluZyBldmVyeSBob3N0XG4gKiBzaGFyZXMsIGFuZCBpdCBydW5zIHRoZSByYWNpbmcgZXZhbHVhdGVzIG9uZSBhZnRlciBhbm90aGVyIG9uIGl0cyBzaW5nbGUgdGhyZWFkLCBzbyBleGFjdGx5IG9uZSBvZlxuICogdGhlbSBnZXRzIGB0cnVlYC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBidWlsZFJlc29sdmVJbnB1dEV4cHJlc3Npb259LCBhbmQgaXQgaXMgd2h5XG4gKiB7QGxpbmsgY2hlY2tJbnB1dENsYWltR3JhbnRlZH0gdHJlYXRzIGEgbm9uLWBmYWxzZWAgcmVzdWx0IGFzIGNsYWltZWQ6IGEgcGFnZSB0aGF0IGhhcyBkcm9wcGVkIHRoZVxuICogbmFtZXNwYWNlIHlpZWxkcyBgdW5kZWZpbmVkYCwgYW5kIGluamVjdGluZyB0d2ljZSBpcyBhIGZhciBiZXR0ZXIgZmFpbHVyZSB0aGFuIG5ldmVyIGluamVjdGluZy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgcmVxdWVzdCBpZCB0byBjbGFpbS5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb24oaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmNsYWltSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0pYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4cHJlc3Npb24gdGhlIGhvc3QgZXZhbHVhdGVzIHRvIGFuc3dlciBvbmUgaW5wdXQgcmVxdWVzdC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyB0aHJvdWdob3V0OiBieSB0aGUgdGltZSB0aGUgaG9zdCBhbnN3ZXJzLCB0aGUgcGFnZSBtYXkgaGF2ZSBuYXZpZ2F0ZWQgYW5kIGRyb3BwZWQgdGhlXG4gKiBuYW1lc3BhY2UsIGFuZCBhIGBUeXBlRXJyb3JgIGluc2lkZSB0aGlzIGV2YWx1YXRlIHdvdWxkIGJlIHJlcG9ydGVkIGFzIGFuIGluamVjdGlvbiBmYWlsdXJlIHRoYXQgYWxyZWFkeVxuICogc3VjY2VlZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSByZXF1ZXN0IGlkIHRoZSByZW5kZXJlciBpcyB3YWl0aW5nIG9uLlxuICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIFdoeSB0aGUgaW5qZWN0aW9uIGZhaWxlZCwgd2hlbiBpdCBkaWQuIE9taXQgb24gc3VjY2Vzcy5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVzb2x2ZUlucHV0RXhwcmVzc2lvbihpZDogc3RyaW5nLCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5yZXNvbHZlSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0sICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JNZXNzYWdlID8/IG51bGwpfSlgO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBmb3Ige0BsaW5rIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb259IGFuZCBzYXlzIHdoZXRoZXIgdG8gaW5qZWN0LlxuICpcbiAqICoqRGVsaWJlcmF0ZWx5IGZhaWxzIE9QRU4uKiogT25seSBhIGxpdGVyYWwgYGZhbHNlYCBcdTIwMTQgdGhlIHBhZ2UgYWN0aXZlbHkgc2F5aW5nIGFub3RoZXIgaG9zdCBhbHJlYWR5XG4gKiBjbGFpbWVkIHRoaXMgaWQgXHUyMDE0IHN0b3BzIHRoZSBpbmplY3Rpb24uIEEgbWlzc2luZyBuYW1lc3BhY2UsIGEgcGFnZSBtaWQtbmF2aWdhdGlvbiwgb3IgYW55IHJlc3VsdFxuICogc2hhcGUgdGhpcyBkb2VzIG5vdCByZWNvZ25pemUgeWllbGRzIGB0cnVlYCwgYmVjYXVzZSBhIGdlc3R1cmUgaW5qZWN0ZWQgdHdpY2UgaXMgYSBmYXIgYmV0dGVyXG4gKiBmYWlsdXJlIHRoYW4gYSBnZXN0dXJlIG5ldmVyIGluamVjdGVkIGF0IGFsbDogdGhlIGZpcnN0IGlzIGEgZG91YmxlZCB0YXAsIHRoZSBzZWNvbmQgaXMgYSB0ZXN0IHRoYXRcbiAqIGhhbmdzIHVudGlsIHRoZSByZW5kZXJlcidzIHRpbWVvdXQgYW5kIHJlcG9ydHMgbm90aGluZyB1c2VmdWwuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByYXcgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBvYmplY3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoaXMgaG9zdCBzaG91bGQgcGVyZm9ybSB0aGUgaW5qZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJbnB1dENsYWltR3JhbnRlZChyZXN1bHQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCAocmVzdWx0IGFzIEV2YWx1YXRlUmVzdWx0KS5yZXN1bHQ/LnZhbHVlICE9PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBUaGUgZmlyc3QgY29kZSBwb2ludCBvZiBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKlxuICogYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIGlzIHR5cGVkIGBudW1iZXIgfCB1bmRlZmluZWRgLCBzbyBldmVyeSBjYWxsIHNpdGUgd291bGQgb3RoZXJ3aXNlIGNhcnJ5IGFcbiAqIGA/PyBmYWxsYmFja2AgdGhhdCBubyBpbnB1dCBjYW4gZXZlciByZWFjaCBcdTIwMTQgYSBkZWFkIGJyYW5jaCB1bmRlciB0aGUgMTAwJSBjb3ZlcmFnZSBnYXRlLiBUaHJvd2luZyBoZXJlXG4gKiBrZWVwcyB0aGF0IGltcG9zc2libGUgY2FzZSBpbiBPTkUgcGxhY2UsIHdoZXJlIGEgdW5pdCB0ZXN0IGNhbiByZWFjaCBpdCBkaXJlY3RseSwgaW5zdGVhZCBvZiBzcHJlYWRpbmdcbiAqIHVucmVhY2hhYmxlIGZhbGxiYWNrcyAob3IgY292ZXJhZ2Ugc3VwcHJlc3Npb25zKSBhY3Jvc3MgdGhlIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIEEgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEByZXR1cm5zIEl0cyBmaXJzdCBjb2RlIHBvaW50LlxuICogQHRocm93cyBXaGVuIGB0ZXh0YCBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVQb2ludE9mKHRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGNvZGVQb2ludCA9IHRleHQuY29kZVBvaW50QXQoRklSU1RfQ09ERV9QT0lOVF9JTkRFWCk7XG4gIGlmIChjb2RlUG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29kZVBvaW50T2YgcmVjZWl2ZWQgYW4gZW1wdHkgc3RyaW5nLicpO1xuICB9XG5cbiAgcmV0dXJuIGNvZGVQb2ludDtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgbW9iaWxlIGlucHV0IHJlcXVlc3QgaW50byB0aGUgb3JkZXJlZCBDRFAgY29tbWFuZHMgdGhhdCByZWFsaXplIGl0LlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IC0gV2hhdCB0aGUgcmVuZGVyZXIgYXNrZWQgdGhlIGhvc3QgdG8gaW5qZWN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DZHBJbnB1dENvbW1hbmRzKHJlcXVlc3Q6IE1vYmlsZUlucHV0UmVxdWVzdCk6IENkcElucHV0Q29tbWFuZFtdIHtcbiAgcmV0dXJuIHJlcXVlc3Qua2luZCA9PT0gJ2tleScgPyB0b0tleUNvbW1hbmRzKHJlcXVlc3QpIDogdG9Qb2ludGVyQ29tbWFuZHMocmVxdWVzdCk7XG59XG5cbi8qKlxuICogRm9sZHMgcmVzb2x2ZWQgbW9kaWZpZXIgbmFtZXMgaW50byBDRFAncyBiaXRtYXNrLlxuICpcbiAqIFVua25vd24gbmFtZXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdGhyb3dpbmc6IHRoZSByZW5kZXJlcidzIGB0b0VsZWN0cm9uTW9kaWZpZXJzYCBpcyBleGhhdXN0aXZlIG92ZXJcbiAqIE9ic2lkaWFuJ3MgYE1vZGlmaWVyYCB1bmlvbiwgc28gYW4gdW5rbm93biBuYW1lIGhlcmUgd291bGQgbWVhbiB0aGUgdHdvIGNvcGllcyBoYXZlIGFscmVhZHkgZHJpZnRlZCwgYW5kXG4gKiBmYWlsaW5nIHRoZSB3aG9sZSBnZXN0dXJlIGlzIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHByZXNzaW5nIGl0IHVubW9kaWZpZWQuXG4gKlxuICogQHBhcmFtIG1vZGlmaWVycyAtIFJlc29sdmVkIGxvd2VyY2FzZSBtb2RpZmllciBuYW1lcy5cbiAqIEByZXR1cm5zIFRoZSBDRFAgbW9kaWZpZXIgYml0bWFzay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2RwTW9kaWZpZXJzKG1vZGlmaWVyczogcmVhZG9ubHkgc3RyaW5nW10pOiBudW1iZXIge1xuICAvLyBTdW1taW5nIERJU1RJTkNUIGJpdHMgZXF1YWxzIE9SLWluZyB0aGVtLCBhbmQgdGhlIGBTZXRgIGlzIHdoYXQgbWFrZXMgdGhhdCBob2xkIGV2ZW4gd2hlbiBhIGNhbGxlclxuICAvLyBwYXNzZXMgdGhlIHNhbWUgbW9kaWZpZXIgdHdpY2UgXHUyMDE0IHNvIHRoZSBtYXNrIGlzIGJ1aWx0IHdpdGhvdXQgYSBiaXR3aXNlIG9wZXJhdG9yLlxuICBjb25zdCBiaXRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbW9kaWZpZXIgb2YgbW9kaWZpZXJzKSB7XG4gICAgY29uc3QgYml0ID0gQ0RQX01PRElGSUVSX0JJVF9CWV9OQU1FLmdldChtb2RpZmllcik7XG4gICAgaWYgKGJpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBiaXRzLmFkZChiaXQpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBiaXRtYXNrID0gTk9fTU9ESUZJRVJTO1xuICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgYml0bWFzayArPSBiaXQ7XG4gIH1cblxuICByZXR1cm4gYml0bWFzaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIGtleSBuYW1lIHRvIGl0cyBDRFAgc3BlbGxpbmcuXG4gKlxuICogQHBhcmFtIGtleSAtIEEgbmFtZWQga2V5IG9yIGEgc2luZ2xlIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiByZXNvbHZlS2V5KGtleTogc3RyaW5nKTogTmFtZWRLZXkge1xuICBjb25zdCBuYW1lZEtleSA9IE5BTUVEX0tFWVMuZ2V0KGtleSk7XG4gIGlmIChuYW1lZEtleSkge1xuICAgIHJldHVybiBuYW1lZEtleTtcbiAgfVxuXG4gIC8vIFwiRXhhY3RseSBvbmUgY29kZSBwb2ludFwiLCB0ZXN0ZWQgd2l0aG91dCBzcGxpdHRpbmcgdGhlIHN0cmluZzogYGZyb21Db2RlUG9pbnRgIHJvdW5kLXRyaXBzIG9ubHkgd2hlblxuICAvLyBga2V5YCBpcyB0aGF0IHNpbmdsZSBjb2RlIHBvaW50LCBzbyBhbiBhc3RyYWwtcGxhbmUgY2hhcmFjdGVyIGNvdW50cyBhcyBvbmUgYW5kIGAnQ3RybCtLJ2AgZG9lcyBub3QuXG4gIGNvbnN0IGNvZGVQb2ludCA9IGtleS5jb2RlUG9pbnRBdChGSVJTVF9DT0RFX1BPSU5UX0lOREVYKTtcbiAgaWYgKGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkIHx8IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCkgIT09IGtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBwcmVzc0tleSByZWNlaXZlZCBhbiB1bmtub3duIGtleSBuYW1lIG9uIG1vYmlsZTogJHtKU09OLnN0cmluZ2lmeShrZXkpfS4gYFxuICAgICAgICArIGBQYXNzIGEgc2luZ2xlIGNoYXJhY3RlciBvciBvbmUgb2Y6ICR7Wy4uLk5BTUVEX0tFWVMua2V5cygpXS5qb2luKCcsICcpfS5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHVwcGVyQ2FzZWRDb2RlUG9pbnQgPSBjb2RlUG9pbnRPZihrZXkudG9VcHBlckNhc2UoKSk7XG4gIHJldHVybiB7XG4gICAgY29kZTogcmVzb2x2ZUtleUNvZGUodXBwZXJDYXNlZENvZGVQb2ludCksXG4gICAgdGV4dDoga2V5LFxuICAgIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogdXBwZXJDYXNlZENvZGVQb2ludFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwaHlzaWNhbCBgY29kZWAgZm9yIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAqXG4gKiBDaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEFTQ0lJIGxldHRlci9kaWdpdCByb3dzIGhhdmUgbm8gc3RhYmxlIHBoeXNpY2FsIGtleSwgc28gdGhleSBnZXQgYW4gZW1wdHlcbiAqIGBjb2RlYCBcdTIwMTQgdGhlIGB0ZXh0YCBzdGlsbCBjYXJyaWVzIHRoZW0sIHdoaWNoIGlzIHdoYXQgYW4gZWRpdG9yIHJlYWRzLlxuICpcbiAqIEBwYXJhbSB1cHBlckNhc2VkQ29kZVBvaW50IC0gVGhlIGNoYXJhY3RlcidzIHVwcGVyLWNhc2VkIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIGBjb2RlYCwgb3IgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlcmUgaXMgbm8gc3RhYmxlIG9uZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUtleUNvZGUodXBwZXJDYXNlZENvZGVQb2ludDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHVwcGVyQ2FzZWRDb2RlUG9pbnQgPj0gVVBQRVJDQVNFX0FfQ09ERV9QT0lOVCAmJiB1cHBlckNhc2VkQ29kZVBvaW50IDw9IFVQUEVSQ0FTRV9aX0NPREVfUE9JTlQpIHtcbiAgICByZXR1cm4gYEtleSR7U3RyaW5nLmZyb21Db2RlUG9pbnQodXBwZXJDYXNlZENvZGVQb2ludCl9YDtcbiAgfVxuXG4gIHJldHVybiB1cHBlckNhc2VkQ29kZVBvaW50ID49IERJR0lUX1pFUk9fQ09ERV9QT0lOVCAmJiB1cHBlckNhc2VkQ29kZVBvaW50IDw9IERJR0lUX05JTkVfQ09ERV9QT0lOVCA/IGBEaWdpdCR7U3RyaW5nLmZyb21Db2RlUG9pbnQodXBwZXJDYXNlZENvZGVQb2ludCl9YCA6ICcnO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBrZXkgcHJlc3MuXG4gKlxuICogTWlycm9ycyB0aGUgZGVza3RvcCB0d2luJ3MgdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBpbiBDRFAncyBzcGVsbGluZzogYHJhd0tleURvd25gIGZpcmVzXG4gKiBga2V5ZG93bmAgYWxvbmUsIGBjaGFyYCBmaXJlcyBga2V5cHJlc3NgIC8gYGJlZm9yZWlucHV0YCAvIGBpbnB1dGAsIGBrZXlVcGAgZmlyZXMgYGtleXVwYC4gQSBrZXkgdGhhdFxuICogcHJvZHVjZXMgbm8gdGV4dCAoYEVzY2FwZWApIHNraXBzIHRoZSBgY2hhcmAsIGV4YWN0bHkgYXMgYSByZWFsIG9uZSBkb2VzLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIGtleSByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b0tleUNvbW1hbmRzKHJlcXVlc3Q6IE1vYmlsZUtleUlucHV0UmVxdWVzdCk6IENkcElucHV0Q29tbWFuZFtdIHtcbiAgY29uc3QgeyBjb2RlLCB0ZXh0LCB3aW5kb3dzVmlydHVhbEtleUNvZGUgfSA9IHJlc29sdmVLZXkocmVxdWVzdC5rZXkpO1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG4gIGNvbnN0IGJhc2UgPSB7IGNvZGUsIGtleTogcmVxdWVzdC5rZXksIG1vZGlmaWVycywgd2luZG93c1ZpcnR1YWxLZXlDb2RlIH07XG5cbiAgY29uc3QgY29tbWFuZHM6IENkcElucHV0Q29tbWFuZFtdID0gW1xuICAgIHsgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCcsIHBhcmFtczogeyAuLi5iYXNlLCB0eXBlOiAncmF3S2V5RG93bicgfSB9LFxuICAgIC4uLih0ZXh0ID09PSB1bmRlZmluZWQgPyBbXSA6IFt7IG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoS2V5RXZlbnQnLCBwYXJhbXM6IHsgLi4uYmFzZSwgdGV4dCwgdHlwZTogJ2NoYXInIH0gfV0pLFxuICAgIHsgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCcsIHBhcmFtczogeyAuLi5iYXNlLCB0eXBlOiAna2V5VXAnIH0gfVxuICBdO1xuXG4gIHJldHVybiBjb21tYW5kcztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgdGFwIG9yIGEgbG9uZy1wcmVzcy5cbiAqXG4gKiAqKlRoZSB0d28gZ2VzdHVyZXMgdGFrZSBkaWZmZXJlbnQgQ0RQIHJvdXRlcywgYW5kIHRoYXQgYXN5bW1ldHJ5IGlzIHRoZSB3aG9sZSBwb2ludC4qKlxuICpcbiAqIEEgdGFwIGlzIGEgdHJ1c3RlZCB0b3VjaCBwYWlyLCB3aGljaCBpcyBhbGwgQ2hyb21pdW0gbmVlZHMgXHUyMDE0IGl0IHN5bnRoZXNpemVzIGBwb2ludGVyZG93bmAgL1xuICogYHRvdWNoc3RhcnRgIC8gYHBvaW50ZXJ1cGAgLyBgdG91Y2hlbmRgIC8gYGNsaWNrYCBmcm9tIGl0LCBldmVyeSBvbmUgYGlzVHJ1c3RlZGAuIFRoZSByZWxlYXNlIGNhcnJpZXNcbiAqIGFuIGVtcHR5IGB0b3VjaFBvaW50c2AgbGlzdCwgd2hpY2ggaXMgQ0RQJ3Mgc3BlbGxpbmcgZm9yIFwiYWxsIGZpbmdlcnMgbGlmdGVkXCIuXG4gKlxuICogQSBsb25nLXByZXNzIGNhbm5vdCBiZSB0aGF0IHNhbWUgcGFpciBoZWxkIGFwYXJ0IGJ5IGEgZHdlbGwsIGJlY2F1c2UgYElucHV0LmRpc3BhdGNoVG91Y2hFdmVudGAgaW5qZWN0c1xuICogYSBgV2ViVG91Y2hFdmVudGAgKipwYXN0KiogQW5kcm9pZCdzIGdlc3R1cmUgcmVjb2duaXplcjogbm8gcmVjb2duaXplciBzZWVzIHRoZSBob2xkLCBzbyBubyBsb25nLXByZXNzXG4gKiBnZXN0dXJlIGlzIGV2ZXIgcHJvZHVjZWQgYW5kIHRoZSBwYWlyIGlzIGNsYXNzaWZpZWQgYXMgYSB0YXAgaG93ZXZlciBsb25nIHRoZSBkd2VsbCBpcy5cbiAqIGBJbnB1dC5zeW50aGVzaXplVGFwR2VzdHVyZWAgaW5zdGVhZCBnb2VzIHRocm91Z2ggQ2hyb21pdW0ncyBzeW50aGV0aWMtZ2VzdHVyZSBjb250cm9sbGVyLCB3aGljaCBidWlsZHNcbiAqIHJlYWwgYE1vdGlvbkV2ZW50YHMgYW5kIGZlZWRzIHRoZW0gdG8gdGhlIHBsYXRmb3JtIHJlY29nbml6ZXIgXHUyMDE0IHRoZSBzdGVwIHRoZSBkaXNwYXRjaCByb3V0ZSBza2lwcy5cbiAqXG4gKiBNZWFzdXJlZCBvbiBhIGxpdmUgZW11bGF0b3IgKDIwMjYtMDktMDgpOiB0aGUgZGlzcGF0Y2ggcGFpciB3aXRoIGEgNjAwbXMgZHdlbGwsIGFpbWVkIGF0IGEgKipyZWFsKipcbiAqIGAubmF2LWZpbGUtdGl0bGVgIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBwcm9kdWNlZCBgcG9pbnRlcmRvd25gIC8gYHRvdWNoc3RhcnRgIC8gYHRvdWNoZW5kYCAvIGBjbGlja2AgYW5kXG4gKiAqKm9wZW5lZCB0aGUgbm90ZSoqIFx1MjAxNCBhIHRhcC4gTm8gYGNvbnRleHRtZW51YCwgYW5kIG5vIE9ic2lkaWFuIG1lbnUuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcG9pbnRlciByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b1BvaW50ZXJDb21tYW5kcyhyZXF1ZXN0OiBNb2JpbGVQb2ludGVySW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG5cbiAgLy8gYHN5bnRoZXNpemVUYXBHZXN0dXJlYCB0YWtlcyBubyBtb2RpZmllciBiaXRtYXNrIFx1MjAxNCBDRFAncyBnZXN0dXJlIEFQSSBoYXMgbm8gcGFyYW1ldGVyIGZvciBvbmUgXHUyMDE0IGFuZFxuICAvLyBBIHRvdWNoIHNjcmVlbiBoYXMgbm8gbW9kaWZpZXIga2V5cyB0byBob2xkIGR1cmluZyBhIHByZXNzLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGNhcnJ5IGhlcmUuXG4gIHJldHVybiByZXF1ZXN0LmtpbmQgPT09ICdsb25nUHJlc3MnXG4gICAgPyBbXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0lucHV0LnN5bnRoZXNpemVUYXBHZXN0dXJlJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZHVyYXRpb246IExPTkdfUFJFU1NfRFdFTExfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIGdlc3R1cmVTb3VyY2VUeXBlOiAndG91Y2gnLFxuICAgICAgICAgIHg6IHJlcXVlc3QueCxcbiAgICAgICAgICB5OiByZXF1ZXN0LnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgICA6IFtcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50JyxcbiAgICAgICAgcGFyYW1zOiB7IG1vZGlmaWVycywgdG91Y2hQb2ludHM6IFt7IHg6IHJlcXVlc3QueCwgeTogcmVxdWVzdC55IH1dLCB0eXBlOiAndG91Y2hTdGFydCcgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50JyxcbiAgICAgICAgcGFyYW1zOiB7IG1vZGlmaWVycywgdG91Y2hQb2ludHM6IFtdLCB0eXBlOiAndG91Y2hFbmQnIH1cbiAgICAgIH1cbiAgICBdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JPLE1BQU0sNEJBQTRCO0FBU2xDLE1BQU0sdUNBQXVDO0FBOEhwRCxNQUFNLG1DQUFtQztBQUV6QyxNQUFNLGVBQWU7QUFDckIsTUFB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
|