@lynx-js/react 0.121.0 → 0.121.2
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/CHANGELOG.md +34 -0
- package/package.json +5 -5
- package/runtime/lazy/element-template-import.js +73 -0
- package/runtime/lazy/import.js +4 -0
- package/runtime/lazy/target.js +23 -0
- package/runtime/lib/core/commit-context.d.ts +8 -0
- package/runtime/lib/core/commit-context.js +18 -0
- package/runtime/lib/core/commit-context.js.map +1 -0
- package/runtime/lib/{snapshot/legacy-react-runtime/index.d.ts → core/compat/legacy-react-runtime.d.ts} +4 -4
- package/runtime/lib/{snapshot/legacy-react-runtime/index.js → core/compat/legacy-react-runtime.js} +6 -6
- package/runtime/lib/core/compat/legacy-react-runtime.js.map +1 -0
- package/runtime/lib/{snapshot → core}/compat/lynxComponent.d.ts +2 -1
- package/runtime/lib/{snapshot → core}/compat/lynxComponent.js +11 -5
- package/runtime/lib/core/compat/lynxComponent.js.map +1 -0
- package/runtime/lib/core/component.d.ts +2 -0
- package/runtime/lib/core/component.js +79 -0
- package/runtime/lib/core/component.js.map +1 -0
- package/runtime/lib/core/forceRootRender.d.ts +7 -0
- package/runtime/lib/core/forceRootRender.js +40 -0
- package/runtime/lib/core/forceRootRender.js.map +1 -0
- package/runtime/lib/core/globalProps.d.ts +31 -0
- package/runtime/lib/core/globalProps.js +55 -0
- package/runtime/lib/core/globalProps.js.map +1 -0
- package/runtime/lib/core/hooks/useLynxGlobalEventListener.js +1 -1
- package/runtime/lib/core/hooks/useLynxGlobalEventListener.js.map +1 -1
- package/runtime/lib/{snapshot/compat → core}/initData.d.ts +1 -1
- package/runtime/lib/{snapshot/compat → core}/initData.js +4 -5
- package/runtime/lib/core/initData.js.map +1 -0
- package/runtime/lib/{snapshot/lynx/dynamic-js.js → core/lynx/dynamic-import.js} +1 -1
- package/runtime/lib/core/lynx/dynamic-import.js.map +1 -0
- package/runtime/lib/core/lynx/lazy-bundle.js.map +1 -0
- package/runtime/lib/core/lynx/runtime-backend.d.ts +5 -0
- package/runtime/lib/core/lynx/runtime-backend.js +20 -0
- package/runtime/lib/core/lynx/runtime-backend.js.map +1 -0
- package/runtime/lib/core/lynx-data-processors.d.ts +2 -0
- package/runtime/lib/core/lynx-data-processors.js +53 -0
- package/runtime/lib/core/lynx-data-processors.js.map +1 -0
- package/runtime/lib/core/lynx-page-data.d.ts +1 -0
- package/runtime/lib/core/lynx-page-data.js +14 -0
- package/runtime/lib/core/lynx-page-data.js.map +1 -0
- package/runtime/lib/core/lynx-update-data.d.ts +11 -0
- package/runtime/lib/core/lynx-update-data.js +21 -0
- package/runtime/lib/core/lynx-update-data.js.map +1 -0
- package/runtime/lib/core/performance.d.ts +30 -0
- package/runtime/lib/core/performance.js +145 -0
- package/runtime/lib/core/performance.js.map +1 -0
- package/runtime/lib/core/ref.d.ts +37 -0
- package/runtime/lib/core/ref.js +108 -0
- package/runtime/lib/core/ref.js.map +1 -0
- package/runtime/lib/core/reload-version.d.ts +2 -0
- package/runtime/lib/{snapshot/lifecycle/pass.js → core/reload-version.js} +4 -5
- package/runtime/lib/core/reload-version.js.map +1 -0
- package/runtime/lib/element-template/background/attr-slots.d.ts +6 -1
- package/runtime/lib/element-template/background/attr-slots.js +35 -2
- package/runtime/lib/element-template/background/attr-slots.js.map +1 -1
- package/runtime/lib/element-template/background/commit-context.d.ts +3 -3
- package/runtime/lib/element-template/background/commit-context.js +15 -18
- package/runtime/lib/element-template/background/commit-context.js.map +1 -1
- package/runtime/lib/element-template/background/commit-hook.d.ts +1 -1
- package/runtime/lib/element-template/background/commit-hook.js +68 -43
- package/runtime/lib/element-template/background/commit-hook.js.map +1 -1
- package/runtime/lib/element-template/background/destroy.js +9 -6
- package/runtime/lib/element-template/background/destroy.js.map +1 -1
- package/runtime/lib/element-template/background/document.js +5 -5
- package/runtime/lib/element-template/background/document.js.map +1 -1
- package/runtime/lib/element-template/background/hydrate.d.ts +2 -3
- package/runtime/lib/element-template/background/hydrate.js +247 -74
- package/runtime/lib/element-template/background/hydrate.js.map +1 -1
- package/runtime/lib/element-template/background/hydration-listener.js +49 -22
- package/runtime/lib/element-template/background/hydration-listener.js.map +1 -1
- package/runtime/lib/element-template/background/instance.d.ts +38 -9
- package/runtime/lib/element-template/background/instance.js +292 -113
- package/runtime/lib/element-template/background/instance.js.map +1 -1
- package/runtime/lib/element-template/client/root.d.ts +7 -0
- package/runtime/lib/element-template/client/root.js +3 -6
- package/runtime/lib/element-template/client/root.js.map +1 -1
- package/runtime/lib/element-template/debug/alog.d.ts +21 -0
- package/runtime/lib/element-template/debug/alog.js +33 -0
- package/runtime/lib/element-template/debug/alog.js.map +1 -1
- package/runtime/lib/element-template/debug/elementPAPICall.js +5 -0
- package/runtime/lib/element-template/debug/elementPAPICall.js.map +1 -1
- package/runtime/lib/element-template/hydration-map.d.ts +5 -0
- package/runtime/lib/element-template/hydration-map.js +12 -0
- package/runtime/lib/element-template/hydration-map.js.map +1 -0
- package/runtime/lib/element-template/index.d.ts +25 -3
- package/runtime/lib/element-template/index.js +38 -9
- package/runtime/lib/element-template/index.js.map +1 -1
- package/runtime/lib/element-template/internal.d.ts +5 -1
- package/runtime/lib/element-template/internal.js +6 -7
- package/runtime/lib/element-template/internal.js.map +1 -1
- package/runtime/lib/element-template/lynx/env.js +5 -48
- package/runtime/lib/element-template/lynx/env.js.map +1 -1
- package/runtime/lib/element-template/lynx/performance.d.ts +0 -21
- package/runtime/lib/element-template/lynx/performance.js +4 -121
- package/runtime/lib/element-template/lynx/performance.js.map +1 -1
- package/runtime/lib/element-template/native/index.d.ts +1 -1
- package/runtime/lib/element-template/native/index.js +28 -2
- package/runtime/lib/element-template/native/index.js.map +1 -1
- package/runtime/lib/element-template/native/main-thread-api.js +27 -5
- package/runtime/lib/element-template/native/main-thread-api.js.map +1 -1
- package/runtime/lib/element-template/native/mts-destroy.js +2 -0
- package/runtime/lib/element-template/native/mts-destroy.js.map +1 -1
- package/runtime/lib/element-template/native/patch-listener.js +6 -2
- package/runtime/lib/element-template/native/patch-listener.js.map +1 -1
- package/runtime/lib/element-template/native/reload-background.d.ts +1 -0
- package/runtime/lib/element-template/native/reload-background.js +39 -0
- package/runtime/lib/element-template/native/reload-background.js.map +1 -0
- package/runtime/lib/element-template/native/reload-main-thread.d.ts +1 -0
- package/runtime/lib/element-template/native/reload-main-thread.js +35 -0
- package/runtime/lib/element-template/native/reload-main-thread.js.map +1 -0
- package/runtime/lib/element-template/prop-adapters/event.d.ts +1 -0
- package/runtime/lib/element-template/prop-adapters/event.js +4 -1
- package/runtime/lib/element-template/prop-adapters/event.js.map +1 -1
- package/runtime/lib/element-template/prop-adapters/ref.d.ts +26 -0
- package/runtime/lib/element-template/prop-adapters/ref.js +107 -0
- package/runtime/lib/element-template/prop-adapters/ref.js.map +1 -0
- package/runtime/lib/element-template/prop-adapters/spread.js +8 -1
- package/runtime/lib/element-template/prop-adapters/spread.js.map +1 -1
- package/runtime/lib/element-template/protocol/opcodes.d.ts +4 -0
- package/runtime/lib/element-template/protocol/opcodes.js +4 -0
- package/runtime/lib/element-template/protocol/opcodes.js.map +1 -1
- package/runtime/lib/element-template/protocol/template-type.d.ts +6 -0
- package/runtime/lib/element-template/protocol/template-type.js +20 -0
- package/runtime/lib/element-template/protocol/template-type.js.map +1 -0
- package/runtime/lib/element-template/protocol/types.d.ts +74 -6
- package/runtime/lib/element-template/runtime/list/list.d.ts +65 -0
- package/runtime/lib/element-template/runtime/list/list.js +587 -0
- package/runtime/lib/element-template/runtime/list/list.js.map +1 -0
- package/runtime/lib/element-template/runtime/page/page.d.ts +5 -2
- package/runtime/lib/element-template/runtime/page/page.js +12 -0
- package/runtime/lib/element-template/runtime/page/page.js.map +1 -1
- package/runtime/lib/element-template/runtime/patch.js +210 -38
- package/runtime/lib/element-template/runtime/patch.js.map +1 -1
- package/runtime/lib/element-template/runtime/render/render-main-thread.d.ts +3 -1
- package/runtime/lib/element-template/runtime/render/render-main-thread.js +38 -7
- package/runtime/lib/element-template/runtime/render/render-main-thread.js.map +1 -1
- package/runtime/lib/element-template/runtime/render/render-opcodes.js +80 -43
- package/runtime/lib/element-template/runtime/render/render-opcodes.js.map +1 -1
- package/runtime/lib/element-template/runtime/render/render-to-opcodes.js +41 -4
- package/runtime/lib/element-template/runtime/render/render-to-opcodes.js.map +1 -1
- package/runtime/lib/element-template/runtime/template/attr-slot-plan.d.ts +1 -0
- package/runtime/lib/element-template/runtime/template/attr-slot-plan.js +4 -0
- package/runtime/lib/element-template/runtime/template/attr-slot-plan.js.map +1 -1
- package/runtime/lib/element-template/runtime/template/handle.d.ts +3 -2
- package/runtime/lib/element-template/runtime/template/handle.js +5 -1
- package/runtime/lib/element-template/runtime/template/handle.js.map +1 -1
- package/runtime/lib/element-template/runtime/template/registry.d.ts +2 -0
- package/runtime/lib/element-template/runtime/template/registry.js +6 -1
- package/runtime/lib/element-template/runtime/template/registry.js.map +1 -1
- package/runtime/lib/element-template/runtime-backend-marker.js +6 -0
- package/runtime/lib/element-template/runtime-backend-marker.js.map +1 -0
- package/runtime/lib/index.d.ts +1 -1
- package/runtime/lib/index.js +3 -1
- package/runtime/lib/index.js.map +1 -1
- package/runtime/lib/internal.d.ts +5 -4
- package/runtime/lib/internal.js +6 -5
- package/runtime/lib/internal.js.map +1 -1
- package/runtime/lib/lynx-api.d.ts +3 -8
- package/runtime/lib/lynx-api.js +8 -45
- package/runtime/lib/lynx-api.js.map +1 -1
- package/runtime/lib/runtime-backend-marker.js +6 -0
- package/runtime/lib/runtime-backend-marker.js.map +1 -0
- package/runtime/lib/snapshot/debug/vnodeSource.js +1 -1
- package/runtime/lib/snapshot/debug/vnodeSource.js.map +1 -1
- package/runtime/lib/snapshot/lifecycle/patch/commit.d.ts +0 -1
- package/runtime/lib/snapshot/lifecycle/patch/commit.js +4 -9
- package/runtime/lib/snapshot/lifecycle/patch/commit.js.map +1 -1
- package/runtime/lib/snapshot/lifecycle/patch/updateMainThread.js +2 -2
- package/runtime/lib/snapshot/lifecycle/patch/updateMainThread.js.map +1 -1
- package/runtime/lib/snapshot/lifecycle/ref/delay.d.ts +6 -13
- package/runtime/lib/snapshot/lifecycle/ref/delay.js +9 -30
- package/runtime/lib/snapshot/lifecycle/ref/delay.js.map +1 -1
- package/runtime/lib/snapshot/lifecycle/reload.js +2 -2
- package/runtime/lib/snapshot/lifecycle/reload.js.map +1 -1
- package/runtime/lib/snapshot/list/list.js +1 -1
- package/runtime/lib/snapshot/list/list.js.map +1 -1
- package/runtime/lib/snapshot/list/listUpdateInfo.js +3 -2
- package/runtime/lib/snapshot/list/listUpdateInfo.js.map +1 -1
- package/runtime/lib/snapshot/lynx/calledByNative.js +3 -9
- package/runtime/lib/snapshot/lynx/calledByNative.js.map +1 -1
- package/runtime/lib/snapshot/lynx/env.js +5 -51
- package/runtime/lib/snapshot/lynx/env.js.map +1 -1
- package/runtime/lib/snapshot/lynx/performance.d.ts +0 -21
- package/runtime/lib/snapshot/lynx/performance.js +7 -121
- package/runtime/lib/snapshot/lynx/performance.js.map +1 -1
- package/runtime/lib/snapshot/lynx/runWithForce.js +9 -39
- package/runtime/lib/snapshot/lynx/runWithForce.js.map +1 -1
- package/runtime/lib/snapshot/lynx/tt.js +10 -30
- package/runtime/lib/snapshot/lynx/tt.js.map +1 -1
- package/runtime/lib/snapshot/snapshot/backgroundSnapshot.js +4 -4
- package/runtime/lib/snapshot/snapshot/backgroundSnapshot.js.map +1 -1
- package/runtime/lib/snapshot/snapshot/list.js +1 -1
- package/runtime/lib/snapshot/snapshot/list.js.map +1 -1
- package/runtime/lib/snapshot/snapshot/ref.d.ts +3 -5
- package/runtime/lib/snapshot/snapshot/ref.js +16 -59
- package/runtime/lib/snapshot/snapshot/ref.js.map +1 -1
- package/runtime/lib/snapshot/snapshot/snapshot.js +1 -1
- package/runtime/lib/snapshot/snapshot/snapshot.js.map +1 -1
- package/runtime/lib/snapshot/snapshot/snapshotInstanceHydrationMap.js +1 -1
- package/runtime/lib/snapshot/snapshot/snapshotInstanceHydrationMap.js.map +1 -1
- package/runtime/lib/tsconfig.tsbuildinfo +1 -1
- package/runtime/lib/worklet-runtime/workletRuntime.js +1 -1
- package/runtime/lib/worklet-runtime/workletRuntime.js.map +1 -1
- package/runtime/worklet-runtime/dev.js +2 -3
- package/runtime/worklet-runtime/main.js +1 -1
- package/testing-library/dist/{rslib-runtime.js → 0~rslib-runtime.js} +14 -13
- package/testing-library/dist/env/index.js +2 -8
- package/testing-library/dist/env/vitest.js +1 -1
- package/testing-library/dist/plugins/index.js +13 -2
- package/testing-library/dist/pure.js +18 -18
- package/testing-library/dist/rstest-config.js +2 -4
- package/testing-library/dist/setupFiles/common/bootstrap.js +1 -0
- package/testing-library/dist/setupFiles/common/runtime-setup.js +1 -1
- package/testing-library/dist/setupFiles/inner/rstest.js +2 -1
- package/testing-library/dist/setupFiles/inner/vitest.js +2 -1
- package/testing-library/dist/type-entry/index.js +1 -0
- package/transform/dist/wasm.cjs +113 -40
- package/runtime/lib/element-template/hooks/react.d.ts +0 -14
- package/runtime/lib/element-template/hooks/react.js +0 -24
- package/runtime/lib/element-template/hooks/react.js.map +0 -1
- package/runtime/lib/element-template/runtime/components/slot.js +0 -11
- package/runtime/lib/element-template/runtime/components/slot.js.map +0 -1
- package/runtime/lib/snapshot/compat/initData.js.map +0 -1
- package/runtime/lib/snapshot/compat/lynxComponent.js.map +0 -1
- package/runtime/lib/snapshot/legacy-react-runtime/index.js.map +0 -1
- package/runtime/lib/snapshot/lifecycle/pass.d.ts +0 -3
- package/runtime/lib/snapshot/lifecycle/pass.js.map +0 -1
- package/runtime/lib/snapshot/lynx/component.js +0 -73
- package/runtime/lib/snapshot/lynx/component.js.map +0 -1
- package/runtime/lib/snapshot/lynx/dynamic-js.js.map +0 -1
- package/runtime/lib/snapshot/lynx/lazy-bundle.js.map +0 -1
- package/testing-library/dist/881.js +0 -1
- /package/runtime/lib/{snapshot/lynx/dynamic-js.d.ts → core/lynx/dynamic-import.d.ts} +0 -0
- /package/runtime/lib/{snapshot → core}/lynx/lazy-bundle.d.ts +0 -0
- /package/runtime/lib/{snapshot → core}/lynx/lazy-bundle.js +0 -0
- /package/runtime/lib/element-template/{runtime/components/slot.d.ts → runtime-backend-marker.d.ts} +0 -0
- /package/runtime/lib/{snapshot/lynx/component.d.ts → runtime-backend-marker.d.ts} +0 -0
- /package/testing-library/dist/{0~123.js → 0~@rstest/adapter-rsbuild.js} +0 -0
|
@@ -83,7 +83,7 @@ function runWorkletImpl(ctx, params, options) {
|
|
|
83
83
|
function validateWorklet(ctx) {
|
|
84
84
|
return typeof ctx === 'object' && ctx !== null && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);
|
|
85
85
|
}
|
|
86
|
-
const workletCache = new WeakMap();
|
|
86
|
+
const workletCache = /*#__PURE__*/ new WeakMap();
|
|
87
87
|
function transformWorklet(ctx, isWorklet) {
|
|
88
88
|
/* v8 ignore next 3 */
|
|
89
89
|
if (typeof ctx !== 'object' || ctx === null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workletRuntime.js","sourceRoot":"","sources":["../../src/worklet-runtime/workletRuntime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"workletRuntime.js","sourceRoot":"","sources":["../../src/worklet-runtime/workletRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
(()=>{
|
|
2
|
-
"use strict";
|
|
3
2
|
function _define_property(obj, key, value) {
|
|
4
3
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
5
4
|
value: value,
|
|
@@ -573,7 +572,7 @@
|
|
|
573
572
|
function validateWorklet(ctx) {
|
|
574
573
|
return 'object' == typeof ctx && null !== ctx && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);
|
|
575
574
|
}
|
|
576
|
-
const workletCache = new WeakMap();
|
|
575
|
+
const workletCache = /*#__PURE__*/ new WeakMap();
|
|
577
576
|
function transformWorklet(ctx, isWorklet) {
|
|
578
577
|
if ('object' != typeof ctx || null === ctx) return ctx;
|
|
579
578
|
if (isWorklet) {
|
|
@@ -630,4 +629,4 @@
|
|
|
630
629
|
}
|
|
631
630
|
})();
|
|
632
631
|
|
|
633
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3QvLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvYXBpL2FuaW1hdGlvbi9hbmltYXRpb24udHM/YzY0NCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvYW5pbWF0aW9uL2VmZmVjdC50cz9jZDQ4Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC50cz8zODdmIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3V0aWxzL3ZlcnNpb24udHM/NjExMSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvZWxlbWVudC50cz84YjMyIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2FwaS9sZXB1c1F1ZXJ5U2VsZWN0b3IudHM/YzlhNCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvbHlueEFwaS50cz9lMDU5Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3J1bk9uTWFpblRocmVhZC50cz83Mzc0Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3V0aWxzL3Byb2ZpbGUudHM/OWVjYiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS93b3JrbGV0UmVmLnRzPzdiOWIiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3QvLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvbGlzdGVuZXJzLnRzPzc3ZDQiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3QvLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvZGVsYXlSdW5PbkJhY2tncm91bmQudHM/N2JmYiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9kZWxheVdvcmtsZXRFdmVudC50cz9kYzA4Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2VvbUltcGwudHM/YTAzOSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9ldmVudFByb3BhZ2F0aW9uLnRzP2Y1NWYiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3QvLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvaHlkcmF0ZS50cz84NTViIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0Ly4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2pzRnVuY3Rpb25MaWZlY3ljbGUudHM/MWRjOCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC8uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS93b3JrbGV0UnVudGltZS50cz9jYjAxIiwiW3JlbGF0aXZlLXJlc291cmNlLXBhdGhdIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEtleWZyYW1lRWZmZWN0IH0gZnJvbSAnLi9lZmZlY3QuanMnO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25PcGVyYXRpb24ge1xuICBTVEFSVCA9IDAsIC8vIFN0YXJ0IGEgbmV3IGFuaW1hdGlvblxuICBQTEFZID0gMSwgLy8gUGxheS9yZXN1bWUgYSBwYXVzZWQgYW5pbWF0aW9uXG4gIFBBVVNFID0gMiwgLy8gUGF1c2UgYW4gZXhpc3RpbmcgYW5pbWF0aW9uXG4gIENBTkNFTCA9IDMsIC8vIENhbmNlbCBhbiBhbmltYXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG4gIHN0YXRpYyBjb3VudCA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBlZmZlY3Q6IEtleWZyYW1lRWZmZWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlZmZlY3Q6IEtleWZyYW1lRWZmZWN0KSB7XG4gICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gICAgdGhpcy5pZCA9ICdfX2x5bngtaW5uZXItanMtYW5pbWF0aW9uLScgKyBBbmltYXRpb24uY291bnQrKztcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLkNBTkNFTCwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHVibGljIHBhdXNlKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBBVVNFLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGxheSgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5QTEFZLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbXG4gICAgICBBbmltYXRpb25PcGVyYXRpb24uU1RBUlQsXG4gICAgICB0aGlzLmlkLFxuICAgICAgdGhpcy5lZmZlY3Qua2V5ZnJhbWVzLFxuICAgICAgdGhpcy5lZmZlY3Qub3B0aW9ucyxcbiAgICBdKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgY2xhc3MgS2V5ZnJhbWVFZmZlY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBFbGVtZW50O1xuICBwdWJsaWMgcmVhZG9ubHkga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W107XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhcmdldDogRWxlbWVudCxcbiAgICBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmtleWZyYW1lcyA9IGtleWZyYW1lcztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNiBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5jb25zdCBUUkFDRV9MSU1JVCA9IDI1NjtcbmNvbnN0IERFRkFVTFRfRkxVU0hfTElNSVQgPSAyNTY7XG5cbmxldCB0cmFjZTogc3RyaW5nW10gPSBbXTtcblxubGV0IGZsdXNoQ291bnRJbldpbmRvdyA9IDA7XG5sZXQgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbmxldCB0cmlwcGVkRXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1c2hUcmFjZShtYXJrZXI6IHN0cmluZyk6IHZvaWQge1xuICB0cmFjZS5wdXNoKG1hcmtlcik7XG4gIGlmICh0cmFjZS5sZW5ndGggPiBUUkFDRV9MSU1JVCkge1xuICAgIHRyYWNlID0gdHJhY2Uuc2xpY2UodHJhY2UubGVuZ3RoIC0gVFJBQ0VfTElNSVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzVHJhY2UobWFya2Vyczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAobWFya2Vycy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICAvLyBEaXNwbGF5IG1vc3QtcmVjZW50LWZpcnN0IHRvIG1ha2UgbG9vcHMgZWFzaWVyIHRvIHJlYWQuXG4gIGxldCBwcmV2ID0gbWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdITtcbiAgbGV0IGNvdW50ID0gMTtcblxuICBmb3IgKGxldCBpID0gbWFya2Vycy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGN1ciA9IG1hcmtlcnNbaV0hO1xuICAgIGlmIChjdXIgPT09IHByZXYpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gICAgcHJldiA9IGN1cjtcbiAgICBjb3VudCA9IDE7XG4gIH1cbiAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gIHJldHVybiBvdXQuam9pbignIDwtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE1hcmsobWFya2VyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBwdXNoVHJhY2UobWFya2VyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2soKTogRXJyb3IgfCBudWxsIHtcbiAgLyogdjggaWdub3JlIG5leHQgMSAqL1xuICBpZiAoIV9fREVWX18pIHJldHVybiBudWxsO1xuICBpZiAodHJpcHBlZEVycm9yKSByZXR1cm4gdHJpcHBlZEVycm9yO1xuXG4gIGlmICghcmVzZXRTY2hlZHVsZWQpIHtcbiAgICByZXNldFNjaGVkdWxlZCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wUmVzZXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZsdXNoQ291bnRJbldpbmRvdysrO1xuICBjb25zdCBsaW1pdCA9IERFRkFVTFRfRkxVU0hfTElNSVQ7XG4gIGlmIChmbHVzaENvdW50SW5XaW5kb3cgPiBsaW1pdCkge1xuICAgIGNvbnN0IHRyYWNlVGV4dCA9IGNvbXByZXNzVHJhY2UodHJhY2UpO1xuICAgIHRyaXBwZWRFcnJvciA9IG5ldyBFcnJvcihcbiAgICAgIGBbUmVhY3RMeW54XVtERVZdIE1haW5UaHJlYWQgZmx1c2ggbG9vcCBkZXRlY3RlZDogcmVuZGVyIGV4ZWN1dGVkICR7Zmx1c2hDb3VudEluV2luZG93fSB0aW1lcyB3aXRob3V0IHlpZWxkaW5nIChsaW1pdD0ke2xpbWl0fSkuIFRyYWNlOiAke3RyYWNlVGV4dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHRyaXBwZWRFcnJvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICAvLyBUaHJvdyBvbiBtYWNyb3Rhc2sgdG8gYXZvaWQgUHJvbWlzZS11bmhhbmRsZWQtcmVqZWN0aW9uIG5vaXNlLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BSZXNldCgpOiB2b2lkIHtcbiAgdHJhY2UgPSBbXTtcbiAgZmx1c2hDb3VudEluV2luZG93ID0gMDtcbiAgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdHJpcHBlZEVycm9yID0gbnVsbDtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbi5qcyc7XG5pbXBvcnQgeyBLZXlmcmFtZUVmZmVjdCB9IGZyb20gJy4vYW5pbWF0aW9uL2VmZmVjdC5qcyc7XG5pbXBvcnQge1xuICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayxcbiAgbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2ssXG4gIG1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQsXG59IGZyb20gJy4uL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5sZXQgd2lsbEZsdXNoID0gZmFsc2U7XG5sZXQgc2hvdWxkRmx1c2ggPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2hvdWxkRmx1c2ggPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBlbGVtZW50OnNldEF0dHJpYnV0ZSAke25hbWV9YCk7XG4gICAgfVxuICAgIF9fU2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0eWxlUHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDpzZXRTdHlsZVByb3BlcnR5ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnRpZXMoc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgNSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhcbiAgICAgICAgYGVsZW1lbnQ6c2V0U3R5bGVQcm9wZXJ0aWVzIGtleXM9JHtPYmplY3Qua2V5cyhzdHlsZXMpLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBfX0FkZElubGluZVN0eWxlKHRoaXMuZWxlbWVudCwga2V5LCBzdHlsZXNba2V5XSEpO1xuICAgIH1cbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIF9fR2V0QXR0cmlidXRlQnlOYW1lKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZU5hbWVzKHRoaXMuZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHJlZiA9IF9fUXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSk7XG4gICAgcmV0dXJuIHJlZiA/IG5ldyBFbGVtZW50KHJlZikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbCh0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSkubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDMsIDQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHkgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAzLjUnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHk6IGtleSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gX19HZXRDb21wdXRlZFN0eWxlQnlLZXkodGhpcy5lbGVtZW50LCBrZXkpO1xuICB9XG5cbiAgcHVibGljIGFuaW1hdGUoXG4gICAga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W10sXG4gICAgb3B0aW9ucz86IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICk6IEFuaW1hdGlvbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicgPyB7IGR1cmF0aW9uOiBvcHRpb25zIH0gOiBvcHRpb25zID8/IHt9O1xuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKG5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLCBrZXlmcmFtZXMsIG5vcm1hbGl6ZWRPcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDppbnZva2UgJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgX19JbnZva2VVSU1ldGhvZChcbiAgICAgICAgdGhpcy5lbGVtZW50LFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXJhbXMgPz8ge30sXG4gICAgICAgIChyZXM6IHsgY29kZTogbnVtYmVyOyBkYXRhOiB1bmtub3duIH0pID0+IHtcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVSSBtZXRob2QgaW52b2tlOiAnICsgSlNPTi5zdHJpbmdpZnkocmVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hFbGVtZW50VHJlZSgpIHtcbiAgICBpZiAod2lsbEZsdXNoIHx8ICFzaG91bGRGbHVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aWxsRmx1c2ggPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB3aWxsRmx1c2ggPSBmYWxzZTtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKCdyZW5kZXInKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYWluVGhyZWFkRmx1c2hMb29wT25GbHVzaE1pY3JvdGFzaygpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTdG9wIHNjaGVkdWxpbmcgZnVydGhlciBmbHVzaGVzIHNvIHdlIGNhbiBzdXJmYWNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUaGlzIGlzIERFVi1vbmx5IGJlaGF2aW9yIGd1YXJkZWQgaW50ZXJuYWxseSBieSB0aGUgZGV2IGd1YXJkLlxuICAgICAgICAgIHNob3VsZEZsdXNoID0gZmFsc2U7XG4gICAgICAgICAgbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfX0ZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHBhZ2VFbGVtZW50ID0gUGFnZUVsZW1lbnQuZ2V0KCk7XG4gIGlmICghcGFnZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBlbGVtZW50ID0gX19RdWVyeVNlbGVjdG9yKHBhZ2VFbGVtZW50LCBjc3NTZWxlY3Rvciwge30pO1xuICByZXR1cm4gZWxlbWVudCA/IG5ldyBFbGVtZW50KGVsZW1lbnQpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoY3NzU2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gIGNvbnN0IHBhZ2VFbGVtZW50ID0gUGFnZUVsZW1lbnQuZ2V0KCk7XG4gIGlmICghcGFnZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChwYWdlRWxlbWVudCwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHF1ZXJ5U2VsZWN0b3IsIHF1ZXJ5U2VsZWN0b3JBbGwgfSBmcm9tICcuL2xlcHVzUXVlcnlTZWxlY3Rvci5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5mdW5jdGlvbiBpbml0QXBpRW52KCk6IHZvaWQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yID0gcXVlcnlTZWxlY3RvcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvckFsbCA9IHF1ZXJ5U2VsZWN0b3JBbGw7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQgPSBseW54LnNldFRpbWVvdXQgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgPSBseW54LnNldEludGVydmFsIGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCA9IGx5bnguY2xlYXJUaW1lb3V0IGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8vIEluIGx5bnggMi4xNCBgY2xlYXJJbnRlcnZhbGAgaXMgbWlzdGFrZW5seSBzcGVsbGVkIGFzIGBjbGVhclRpbWVJbnRlcnZhbGAuIFRoaXMgaXMgZml4ZWQgaW4gbHlueCAyLjE1LlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsID0gKGx5bnguY2xlYXJJbnRlcnZhbCA/PyBseW54LmNsZWFyVGltZUludGVydmFsKSBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSBhcyAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IG51bWJlcjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDIsIDE1KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3JlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBtYWluIHRocmVhZCBzY3JpcHQgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAyLjE2JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGx5bnguY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKHJlcXVlc3RJZDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgeyBpbml0QXBpRW52IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVuT25NYWluVGhyZWFkVGFzayh0YXNrOiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSwgcmVzb2x2ZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IHJldHVyblZhbHVlO1xuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gcnVuV29ya2xldCh0YXNrLCBwYXJhbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFRPRE86IFNob3VsZCBiZSBtb3JlIHByb3BlciB0byByZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgbHlueC5nZXRKU0NvbnRleHQoKS5kaXNwYXRjaEV2ZW50KHtcbiAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMuRnVuY3Rpb25DYWxsUmV0LFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXNvbHZlSWQsXG4gICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgfSBhcyBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSksXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZTxSZXQsIEZuIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmV0PihcbiAgc2xpY2VOYW1lOiBzdHJpbmcsXG4gIGY6IEZuLFxuKTogUmV0IHtcbiAgLyogdjggaWdub3JlIG5leHQgOSAqL1xuICAvLyBUT0RPOiBjaGFuZ2UgaXQgdG8gX19QUk9GSUxFX19cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zb2xlLnByb2ZpbGU/LihzbGljZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zb2xlLnByb2ZpbGVFbmQ/LigpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZigpO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgUmVmSW1wbCB7XG4gIF93b3JrbGV0UmVmTWFwOiBSZWNvcmQ8V29ya2xldFJlZklkLCBXb3JrbGV0UmVmPHVua25vd24+PjtcbiAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIHVwZGF0ZVdvcmtsZXRSZWYoXG4gICAgcmVmSW1wbDogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICAgIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbiAgKTogdm9pZDtcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMocGF0Y2g6IFtudW1iZXIsIHVua25vd25dW10pOiB2b2lkO1xuICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUmVmSW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXRSZWYoKTogUmVmSW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfd29ya2xldFJlZk1hcDoge30sXG4gICAgLyoqXG4gICAgICogTWFwIG9mIHdvcmtsZXQgcmVmcyB0aGF0IGFyZSBjcmVhdGVkIGR1cmluZyBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLlxuICAgICAqIFRoZXNlIHJlZnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWdhdGl2ZSBJRHMgYW5kIG5lZWQgdG8gYmUgaHlkcmF0ZWRcbiAgICAgKiB3aGVuIHRoZSBhcHAgc3RhcnRzLiBUaGUgbWFwIGlzIGNsZWFyZWQgYWZ0ZXIgaHlkcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICogdG8gZnJlZSB1cCBtZW1vcnkuXG4gICAgICovXG4gICAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDoge30sXG4gICAgdXBkYXRlV29ya2xldFJlZixcbiAgICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbiAgICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCxcbiAgfSk7XG59XG5cbmNvbnN0IGNyZWF0ZVdvcmtsZXRSZWYgPSA8VD4oXG4gIGlkOiBXb3JrbGV0UmVmSWQsXG4gIHZhbHVlOiBULFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogdmFsdWUsXG4gICAgX3d2aWQ6IGlkLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RnJvbVdvcmtsZXRSZWZNYXAgPSA8VD4oXG4gIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPFQ+LFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIGNvbnN0IGlkID0gcmVmSW1wbC5fd3ZpZDtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBNYWluVGhyZWFkUmVmOmdldCBpZD0ke2lkfWApO1xuICB9XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYWluVGhyZWFkUmVmIGlzIG5vdCBpbml0aWFsaXplZDogJyArIGlkKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5mdW5jdGlvbiByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKGlkOiBXb3JrbGV0UmVmSWQpOiB2b2lkIHtcbiAgZGVsZXRlIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlLCB0aGVuIHNldCB0aGUgd29ya2xldCB2YWx1ZSB0byBpdC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGBzbmFwc2hvdENvbnRleHRVcGRhdGVXb3JrbGV0UmVmYC5cbiAqIEBwYXJhbSBoYW5kbGUgaGFuZGxlIG9mIHRoZSB3b3JrbGV0IHZhbHVlLlxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZihcbiAgaGFuZGxlOiBXb3JrbGV0UmVmSW1wbDxFbGVtZW50IHwgbnVsbD4sXG4gIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbik6IHZvaWQge1xuICBnZXRGcm9tV29ya2xldFJlZk1hcChoYW5kbGUpLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgPyBuZXcgRWxlbWVudChlbGVtZW50KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMoXG4gIHBhdGNoOiBbV29ya2xldFJlZklkLCB1bmtub3duXVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ3VwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzJywgKCkgPT4ge1xuICAgIHBhdGNoLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIWltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSkge1xuICAgICAgICBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkIHtcbiAgaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCA9IHt9O1xufVxuXG5leHBvcnQge1xuICB0eXBlIFJlZkltcGwsXG4gIGNyZWF0ZVdvcmtsZXRSZWYsXG4gIGluaXRXb3JrbGV0UmVmLFxuICBnZXRGcm9tV29ya2xldFJlZk1hcCxcbiAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCxcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VXb3JrbGV0UmVmRGF0YSwgUnVuV29ya2xldEN0eERhdGEgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnLi90eXBlcy9ydW50aW1lUHJveHkuanMnO1xuaW1wb3J0IHsgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgY29uc3QganNDb250ZXh0ID0gbHlueC5nZXRKU0NvbnRleHQoKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5ydW5Xb3JrbGV0Q3R4LFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEgYXMgc3RyaW5nKSBhcyBSdW5Xb3JrbGV0Q3R4RGF0YTtcbiAgICAgIHJ1blJ1bk9uTWFpblRocmVhZFRhc2soZGF0YS53b3JrbGV0LCBkYXRhLnBhcmFtcyBhcyBDbG9zdXJlVmFsdWVUeXBlW10sIGRhdGEucmVzb2x2ZUlkKTtcbiAgICB9LFxuICApO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJlbGVhc2VXb3JrbGV0UmVmLFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoKGV2ZW50LmRhdGEgYXMgUmVsZWFzZVdvcmtsZXRSZWZEYXRhKS5pZCk7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBKc0ZuSGFuZGxlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbmludGVyZmFjZSBEZXRhaWxzIHtcbiAgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgaW5zZXJ0ZWQgaGVyZSBkdXJpbmcgY3R4IGh5ZHJhdGlvbi5cbiAganNGbkhhbmRsZT86IEpzRm5IYW5kbGU7XG59XG5cbmludGVyZmFjZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICAvLyBFbGVtZW50cyBzaG91bGQga2VlcCB0aGUgb3JkZXIgYmVpbmcgY2FsbGVkIGJ5IHRoZSB1c2VyLlxuICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IERldGFpbHNbXTtcbiAgZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIGZuOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBbXSxcbiAgICBkZWxheVJ1bk9uQmFja2dyb3VuZCxcbiAgICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCkge1xuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkucHVzaCh7IHRhc2sgfSk7XG4gIGNvbnN0IGRlbGF5SW5kaWNlcyA9IGZuT2JqLl9kZWxheUluZGljZXMgPz89IFtdO1xuICBkZWxheUluZGljZXMucHVzaChpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGRldGFpbHMgb2YgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5KSB7XG4gICAgaWYgKGRldGFpbHMuanNGbkhhbmRsZSkge1xuICAgICAgZGV0YWlscy50YXNrKGRldGFpbHMuanNGbkhhbmRsZS5fanNGbklkISwgZGV0YWlscy5qc0ZuSGFuZGxlLl9leGVjSWQhKTtcbiAgICB9XG4gIH1cbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmV4cG9ydCB7IHR5cGUgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsLCBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgRXZlbnREZWxheUltcGwge1xuICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IE1hcDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGVbXVtdPjtcbiAgcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkO1xuICBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogRXZlbnREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRFdmVudERlbGF5KCk6IEV2ZW50RGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogbmV3IE1hcCgpLFxuICAgIHJ1bkRlbGF5ZWRXb3JrbGV0LFxuICAgIGNsZWFyRGVsYXllZFdvcmtsZXRzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlFeGVjVW50aWxKc1JlYWR5KFxuICBoYXNoOiBzdHJpbmcsXG4gIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2RlbGF5RXhlY1VudGlsSnNSZWFkeTogJyArIGhhc2gsICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA7XG4gICAgY29uc3QgcGFyYW1WZWMgPSBtYXAuZ2V0KGhhc2gpO1xuICAgIGlmIChwYXJhbVZlYykge1xuICAgICAgcGFyYW1WZWMucHVzaChwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGhhc2gsIFtwYXJhbXNdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQge1xuICBwcm9maWxlKCdjb21taXREZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXNWZWMgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuZ2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICk7XG4gICAgaWYgKHBhcmFtc1ZlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlZnRQYXJhbXNWZWM6IENsb3N1cmVWYWx1ZVR5cGVbXVtdID0gW107XG4gICAgcGFyYW1zVmVjLmZvckVhY2goKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQYXJhbSA9IHBhcmFtc1swXSBhcyB7IGN1cnJlbnRUYXJnZXQ/OiB7IGVsZW1lbnRSZWZwdHI/OiBFbGVtZW50Tm9kZSB9IH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RQYXJhbT8uY3VycmVudFRhcmdldD8uZWxlbWVudFJlZnB0ciA9PT0gZWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwcm9maWxlKCdydW5EZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bldvcmtsZXQod29ya2xldCwgcGFyYW1zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0UGFyYW1zVmVjLnB1c2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuc2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICAgbGVmdFBhcmFtc1ZlYyxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZCB7XG4gIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5jbGVhcigpO1xufVxuXG5leHBvcnQgeyB0eXBlIEV2ZW50RGVsYXlJbXBsLCBpbml0RXZlbnREZWxheSwgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBydW5EZWxheWVkV29ya2xldCwgY2xlYXJEZWxheWVkV29ya2xldHMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBzZXRTaG91bGRGbHVzaCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVvbUltcGwge1xuICBzZXRTaG91bGRGbHVzaCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RW9tSW1wbCgpOiBFb21JbXBsIHtcbiAgcmV0dXJuIHtcbiAgICBzZXRTaG91bGRGbHVzaCxcbiAgfTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgRXZlbnRDdHgsIFJ1bldvcmtsZXRPcHRpb25zIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBSdW5Xb3JrbGV0U291cmNlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbi8vIEV2ZW50UmVzdWx0IGVudW0gdmFsdWVzXG5leHBvcnQgY29uc3QgRXZlbnRSZXN1bHQgPSB7XG4gIGtEZWZhdWx0OiAweDAsXG4gIGtTdG9wUHJvcGFnYXRpb25NYXNrOiAweDEsXG4gIGtTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25NYXNrOiAweDIsXG59IGFzIGNvbnN0O1xuXG50eXBlIEV2ZW50TGlrZSA9IFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudE9iamVjdChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyxcbik6IGN0eCBpcyBbRXZlbnRMaWtlLCAuLi5DbG9zdXJlVmFsdWVUeXBlW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGN0eCkgfHwgdHlwZW9mIGN0eFswXSAhPT0gJ29iamVjdCcgfHwgY3R4WzBdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc291cmNlID09PSBSdW5Xb3JrbGV0U291cmNlLkVWRU5UKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBldmVudCBtZXRob2RzIHRvIGFuIGV2ZW50IG9iamVjdCBpZiBuZWVkZWRcbiAqIEBwYXJhbSBjdHggVGhlIGV2ZW50IG9iamVjdCB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgcnVuIHdvcmtsZXQgb3B0aW9uc1xuICogQHJldHVybnMgQSB0dXBsZSBvZiBib29sZWFuIGFuZCB0aGUgZXZlbnQgcmV0dXJuIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQoY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IFtib29sZWFuLCBFdmVudEN0eF0ge1xuICBpZiAoIWlzRXZlbnRPYmplY3QoY3R4LCBvcHRpb25zKSkge1xuICAgIHJldHVybiBbZmFsc2UsIHt9XTtcbiAgfVxuICBjb25zdCBldmVudEN0eDogRXZlbnRDdHggPSB7fTtcbiAgY29uc3QgZXZlbnRPYmogPSBjdHhbMF07XG5cbiAgLy8gQWRkIHN0b3BQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgLy8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgcmV0dXJuIFt0cnVlLCBldmVudEN0eF07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEpzRm5IYW5kbGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldCBjb250ZXh0IHdpdGggZGF0YSBmcm9tIGEgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dC5cbiAqIFRoaXMgcHJvY2VzcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gYWxsIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgZnVuY3Rpb25zXG4gKiBhbmQgaW5pdGlhbGl6ZSBgV29ya2xldFJlZmAgdmFsdWVzIG1vZGlmaWVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGN0eCBUaGUgdGFyZ2V0IFdvcmtsZXQgY29udGV4dCB0byBiZSBoeWRyYXRlZC5cbiAqIEBwYXJhbSBmaXJzdFNjcmVlbkN0eCBUaGUgV29ya2xldCBjb250ZXh0IGZyb20gdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgZGF0YSB0byBoeWRyYXRlIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlQ3R4KGN0eDogV29ya2xldCwgZmlyc3RTY3JlZW5DdHg6IFdvcmtsZXQpOiB2b2lkIHtcbiAgcHJvZmlsZSgnaHlkcmF0ZUN0eCcsICgpID0+IHtcbiAgICBoeWRyYXRlQ3R4SW1wbChjdHgsIGZpcnN0U2NyZWVuQ3R4LCBjdHguX2V4ZWNJZCEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUN0eEltcGwoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZmlyc3RTY3JlZW5DdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGV4ZWNJZDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGlmIChcbiAgICAhY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8ICFmaXJzdFNjcmVlbkN0eFxuICAgIHx8IHR5cGVvZiBmaXJzdFNjcmVlbkN0eCAhPT0gJ29iamVjdCdcbiAgKSByZXR1cm47XG5cbiAgY29uc3QgY3R4T2JqID0gY3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuICBjb25zdCBmaXJzdFNjcmVlbkN0eE9iaiA9IGZpcnN0U2NyZWVuQ3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGlmIChjdHhPYmpbJ193a2x0SWQnXSAmJiBjdHhPYmpbJ193a2x0SWQnXSAhPT0gZmlyc3RTY3JlZW5DdHhPYmpbJ193a2x0SWQnXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZm9yLWluLWFycmF5XG4gIGZvciAoY29uc3Qga2V5IGluIGN0eCkge1xuICAgIGlmIChrZXkgPT09ICdfd3ZpZCcpIHtcbiAgICAgIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBXb3JrbGV0UmVmSWQsXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX2pzRm4nKSB7XG4gICAgICBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGV4ZWNJZCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0U2NyZWVuVmFsdWUgPSB0eXBlb2YgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIHsgY3R4UmVmPzogV2Vha1JlZjxvYmplY3Q+IH0pLmN0eFJlZj8uZGVyZWYoKSBhcyBDbG9zdXJlVmFsdWVUeXBlXG4gICAgICAgIDogZmlyc3RTY3JlZW5DdHhPYmpba2V5XTtcbiAgICAgIGh5ZHJhdGVDdHhJbXBsKGN0eE9ialtrZXldLCBmaXJzdFNjcmVlblZhbHVlLCBleGVjSWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldFJlZiBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gKiBUaGlzIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBXb3JrbGV0UmVmJ3MgYmFja2dyb3VuZCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIGNoYW5nZXNcbiAqIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGZpcnN0LXNjcmVlbiBXb3JrbGV0IGNvbnRleHQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVmSWQgVGhlIElEIG9mIHRoZSBXb3JrbGV0UmVmIHRvIGh5ZHJhdGUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIFdvcmtsZXRSZWYuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICByZWZJZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4pIHtcbiAgaWYgKCdfaW5pdFZhbHVlJyBpbiB2YWx1ZSkge1xuICAgIC8vIFRoZSByZWYgaGFzIG5vdCBiZWVuIGFjY2Vzc2VkIHlldC5cbiAgICByZXR1cm47XG4gIH1cbiAgbHlueFdvcmtsZXRJbXBsIS5fcmVmSW1wbC5fd29ya2xldFJlZk1hcFtyZWZJZF0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBkZWxheWVkIGBydW5PbkJhY2tncm91bmRgIHRhc2tzLlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYW55IGBydW5PbkJhY2tncm91bmRgIGNhbGxzIHRoYXQgd2VyZSBkZWxheWVkXG4gKiBkdXJpbmcgdGhlIGZpcnN0LXNjcmVlbiByZW5kZXJpbmcgYXJlIGNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlaXJcbiAqIHJlc3BlY3RpdmUgSmF2YVNjcmlwdCBmdW5jdGlvbiBoYW5kbGVzIGluIHRoZSBoeWRyYXRlZCBXb3JrbGV0IGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzKFxuICBmbk9ianM6IFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LCAvLyBleGFtcGxlOiB7XCJfanNGbjFcIjp7XCJfanNGbklkXCI6MX19XG4gIGZpcnN0U2NyZWVuRm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2lzRmlyc3RTY3JlZW5cIjp0cnVlLFwiX2RlbGF5SW5kaWNlc1wiOlswXX19XG4gIGV4ZWNJZDogbnVtYmVyLFxuKSB7XG4gIGZvciAoY29uc3QgZm5OYW1lIGluIGZuT2Jqcykge1xuICAgIGNvbnN0IGZuT2JqID0gZm5PYmpzW2ZuTmFtZV0hO1xuICAgIGNvbnN0IGZpcnN0U2NyZWVuRm5PYmo6IEpzRm5IYW5kbGUgfCB1bmRlZmluZWQgPSBmaXJzdFNjcmVlbkZuT2Jqc1tmbk5hbWVdO1xuICAgIGlmICghZmlyc3RTY3JlZW5Gbk9iaj8uX2RlbGF5SW5kaWNlcykge1xuICAgICAgaWYgKGZpcnN0U2NyZWVuRm5PYmopIHtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5faXNGaXJzdFNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBmaXJzdFNjcmVlbkZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlyc3RTY3JlZW5Gbk9iaiwgZm5PYmopO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgZmlyc3RTY3JlZW5Gbk9iai5fZGVsYXlJbmRpY2VzKSB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gbHlueFdvcmtsZXRJbXBsIS5fcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsXG4gICAgICAgIC5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXlbaW5kZXhdITtcbiAgICAgIGZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICBkZXRhaWxzLmpzRm5IYW5kbGUgPSBmbk9iajtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4vdXRpbHMvdmVyc2lvbi5qcyc7XG5cbi8qKlxuICogYEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyYCBtb25pdG9ycyByZWZlcmVuY2VzIHRvIEpTIGZ1bmN0aW9uIGhhbmRsZXMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAuXG4gKiBJbiBKUyBjb250ZXh0LCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAgaXMgcmVmZXJlbmNlZCBieSBgSnNGbkhhbmRsZWBzIGFuZCBmaW5hbGx5IGJ5IGBleGVjSWRgLlxuICogV2hlbiBhbGwgYEpzRm5IYW5kbGVgcyBpbiBsZXB1cyBhcmUgcmVsZWFzZWQsIGFuIGV2ZW50IHdpbGwgYmUgc2VudCB0byBKUyBjb250ZXh0IHRvIGRlLXJlZiB0aGUgYGV4ZWNJZGAsXG4gKiByZXN1bHRpbmcgYSBkZS1yZWYgdG8gdGhlIGpzIGZ1bmN0aW9uIGluIEpTIGNvbnRleHQuXG4gKi9cbmNsYXNzIEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBleGVjSWRSZWZDb3VudCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgZXhlY0lkU2V0VG9GaXJlID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIHByaXZhdGUgcmV0YWluZWRPYmplY3RzID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJldGFpbmVkT2JqZWN0cy5oYXMob2JqVG9SZWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmV0YWluZWRPYmplY3RzLmFkZChvYmpUb1JlZik7XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoXG4gICAgICBleGVjSWQsXG4gICAgICAodGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSA/PyAwKSArIDEsXG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdHJ5IS5yZWdpc3RlcihvYmpUb1JlZiwgZXhlY0lkKTtcbiAgfVxuXG4gIHJlbW92ZVJlZihleGVjSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJjID0gdGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSE7XG4gICAgaWYgKHJjID4gMSkge1xuICAgICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoZXhlY0lkLCByYyAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4ZWNJZFJlZkNvdW50LmRlbGV0ZShleGVjSWQpO1xuICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmFkZChleGVjSWQpO1xuICAgIGlmICghdGhpcy53aWxsRmlyZSkge1xuICAgICAgdGhpcy53aWxsRmlyZSA9IHRydWU7XG4gICAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpcmUoKTogdm9pZCB7XG4gICAgcHJvZmlsZSgnSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIuZmlyZScsICgpID0+IHtcbiAgICAgIGx5bnguZ2V0SlNDb250ZXh0KCkuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMucmVsZWFzZUJhY2tncm91bmRXb3JrbGV0Q3R4LFxuICAgICAgICBkYXRhOiBBcnJheS5mcm9tKHRoaXMuZXhlY0lkU2V0VG9GaXJlKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGVjSWRTZXRUb0ZpcmUuY2xlYXIoKTtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1Nka1ZlcnNpb25HdCgyLCAxNSk7XG59XG5cbmV4cG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFJ1bldvcmtsZXRPcHRpb25zLCBXb3JrbGV0LCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgUnVuV29ya2xldFNvdXJjZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH0gZnJvbSAnLi9kZWxheVJ1bk9uQmFja2dyb3VuZC5qcyc7XG5pbXBvcnQgeyBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIGluaXRFdmVudERlbGF5IH0gZnJvbSAnLi9kZWxheVdvcmtsZXRFdmVudC5qcyc7XG5pbXBvcnQgeyBpbml0RW9tSW1wbCB9IGZyb20gJy4vZW9tSW1wbC5qcyc7XG5pbXBvcnQgeyBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCB9IGZyb20gJy4vZXZlbnRQcm9wYWdhdGlvbi5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlQ3R4IH0gZnJvbSAnLi9oeWRyYXRlLmpzJztcbmltcG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfSBmcm9tICcuL2pzRnVuY3Rpb25MaWZlY3ljbGUuanMnO1xuaW1wb3J0IHsgcnVuUnVuT25NYWluVGhyZWFkVGFzayB9IGZyb20gJy4vcnVuT25NYWluVGhyZWFkLmpzJztcbmltcG9ydCB7IG1haW5UaHJlYWRGbHVzaExvb3BNYXJrIH0gZnJvbSAnLi91dGlscy9tYWluVGhyZWFkRmx1c2hMb29wR3VhcmQuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5pbXBvcnQgeyBnZXRGcm9tV29ya2xldFJlZk1hcCwgaW5pdFdvcmtsZXRSZWYgfSBmcm9tICcuL3dvcmtsZXRSZWYuanMnO1xuXG5mdW5jdGlvbiBpbml0V29ya2xldCgpOiB2b2lkIHtcbiAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwgPSB7XG4gICAgX3dvcmtsZXRNYXA6IHt9LFxuICAgIF9yZWZJbXBsOiBpbml0V29ya2xldFJlZigpLFxuICAgIF9ydW5PbkJhY2tncm91bmREZWxheUltcGw6IGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpLFxuICAgIF9oeWRyYXRlQ3R4OiBoeWRyYXRlQ3R4LFxuICAgIF9ldmVudERlbGF5SW1wbDogaW5pdEV2ZW50RGVsYXkoKSxcbiAgICBfZW9tSW1wbDogaW5pdEVvbUltcGwoKSxcbiAgICBfcnVuUnVuT25NYWluVGhyZWFkVGFzazogcnVuUnVuT25NYWluVGhyZWFkVGFzayxcbiAgfTtcblxuICBpZiAoaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCkpIHtcbiAgICBnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbC5fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIgPSBuZXcgSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIoKTtcbiAgfVxuXG4gIGdsb2JhbFRoaXMucmVnaXN0ZXJXb3JrbGV0ID0gcmVnaXN0ZXJXb3JrbGV0O1xuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldEludGVybmFsID0gcmVnaXN0ZXJXb3JrbGV0O1xuICBnbG9iYWxUaGlzLnJ1bldvcmtsZXQgPSBydW5Xb3JrbGV0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgd29ya2xldCBmdW5jdGlvbiwgYWxsb3dpbmcgaXQgdG8gYmUgZXhlY3V0ZWQgYnkgYHJ1bldvcmtsZXQoKWAuXG4gKiBUaGlzIGlzIGNhbGxlZCBpbiBsZXB1cy5qcy5cbiAqIEBwYXJhbSBfdHlwZSB3b3JrbGV0IHR5cGUsICdtYWluLXRocmVhZCcgb3IgJ3VpJ1xuICogQHBhcmFtIGlkIHdvcmtsZXQgaGFzaFxuICogQHBhcmFtIHdvcmtsZXQgd29ya2xldCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiByZWdpc3RlcldvcmtsZXQoX3R5cGU6IHN0cmluZywgaWQ6IHN0cmluZywgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik6IHZvaWQge1xuICBseW54V29ya2xldEltcGwuX3dvcmtsZXRNYXBbaWRdID0gd29ya2xldDtcbn1cblxuLyoqXG4gKiBFbnRyYW5jZSBvZiBhbGwgd29ya2xldCBjYWxscy5cbiAqIE5hdGl2ZSBldmVudCB0b3VjaCBoYW5kbGVyIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGN0eCB3b3JrbGV0IG9iamVjdC5cbiAqIEBwYXJhbSBwYXJhbXMgd29ya2xldCBwYXJhbXMuXG4gKiBAcGFyYW0gb3B0aW9ucyBydW4gd29ya2xldCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBydW5Xb3JrbGV0KGN0eDogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IHVua25vd24ge1xuICBpZiAoIXZhbGlkYXRlV29ya2xldChjdHgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKF9fREVWX18pIHtcbiAgICBpZiAob3B0aW9ucz8uc291cmNlID09PSBSdW5Xb3JrbGV0U291cmNlLkVWRU5UICYmIEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgICAgY29uc3QgZmlyc3QgPSBwYXJhbXNbMF07XG4gICAgICBjb25zdCB0ID0gKGZpcnN0IGFzIHsgdHlwZT86IHVua25vd24gfSkudHlwZTtcbiAgICAgIGlmICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYGV2ZW50OiR7dH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgTWFpblRocmVhZEZ1bmN0aW9uIGlkPSR7U3RyaW5nKGN0eC5fd2tsdElkKX1gKTtcbiAgfVxuXG4gIGlmICgnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCkge1xuICAgIGRlbGF5RXhlY1VudGlsSnNSZWFkeShjdHguX2xlcHVzV29ya2xldEhhc2gsIHBhcmFtcyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBydW5Xb3JrbGV0SW1wbChjdHgsIHBhcmFtcywgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJ1bldvcmtsZXRJbXBsKGN0eDogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IHVua25vd24ge1xuICBjb25zdCB3b3JrbGV0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldEN0eCAnICsgY3R4Ll93a2x0SWQsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChjdHgsIHRydWUpLFxuICApO1xuICBjb25zdCBwYXJhbXNfOiBDbG9zdXJlVmFsdWVUeXBlW10gPSBwcm9maWxlKFxuICAgICd0cmFuc2Zvcm1Xb3JrbGV0UGFyYW1zJyxcbiAgICAoKSA9PiB0cmFuc2Zvcm1Xb3JrbGV0KHBhcmFtcyB8fCBbXSwgZmFsc2UpLFxuICApO1xuXG4gIGNvbnN0IFtoYXNFdmVudE1ldGhvZHMsIGV2ZW50Q3R4XSA9IGFkZEV2ZW50TWV0aG9kc0lmTmVlZGVkKHBhcmFtc18sIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHByb2ZpbGUoJ3J1bldvcmtsZXQnLCAoKSA9PiB3b3JrbGV0KC4uLnBhcmFtc18pKTtcblxuICBpZiAoaGFzRXZlbnRNZXRob2RzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJldHVyblZhbHVlOiByZXN1bHQsXG4gICAgICBldmVudFJldHVyblJlc3VsdDogZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdvcmtsZXQoY3R4OiB1bmtub3duKTogY3R4IGlzIFdvcmtsZXQge1xuICByZXR1cm4gdHlwZW9mIGN0eCA9PT0gJ29iamVjdCcgJiYgY3R4ICE9PSBudWxsICYmICgnX3drbHRJZCcgaW4gY3R4IHx8ICdfbGVwdXNXb3JrbGV0SGFzaCcgaW4gY3R4KTtcbn1cblxuY29uc3Qgd29ya2xldENhY2hlID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pPigpO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KGN0eDogV29ya2xldCwgaXNXb3JrbGV0OiB0cnVlKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuICBpc1dvcmtsZXQ6IGZhbHNlLFxuKTogQ2xvc3VyZVZhbHVlVHlwZVtdO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGlzV29ya2xldDogYm9vbGVhbixcbik6IENsb3N1cmVWYWx1ZVR5cGUgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bikge1xuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyB8fCBjdHggPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIGNvbnN0IHJlcyA9IHdvcmtsZXRDYWNoZS5nZXQoY3R4KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdvcmtsZXQgPSB7IG1haW46IGN0eCB9O1xuICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIod29ya2xldCwgMCwgY3R4KTtcblxuICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgd29ya2xldENhY2hlLnNldChjdHgsIHdvcmtsZXQubWFpbik7XG4gIH1cblxuICByZXR1cm4gd29ya2xldC5tYWluO1xufVxuXG5jb25zdCB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIgPSAoXG4gIHZhbHVlOiBDbG9zdXJlVmFsdWVUeXBlLFxuICBkZXB0aDogbnVtYmVyLFxuICBjdHg6IHVua25vd24sXG4pID0+IHtcbiAgY29uc3QgbGltaXQgPSAxMDAwO1xuICBpZiAoKytkZXB0aCA+PSBsaW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGVwdGggb2YgdmFsdWUgZXhjZWVkcyBsaW1pdCBvZiAnICsgbGltaXQgKyAnLicpO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2JqID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3Qgc3ViT2JqOiBDbG9zdXJlVmFsdWVUeXBlID0gb2JqW2tleV07XG4gICAgaWYgKHR5cGVvZiBzdWJPYmogIT09ICdvYmplY3QnIHx8IHN1Yk9iaiA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKC8qKiBpc0V2ZW50VGFyZ2V0ICovICdlbGVtZW50UmVmcHRyJyBpbiBzdWJPYmopIHtcbiAgICAgIG9ialtrZXldID0gbmV3IEVsZW1lbnQoc3ViT2JqWydlbGVtZW50UmVmcHRyJ10gYXMgRWxlbWVudE5vZGUpO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChzdWJPYmogaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIoc3ViT2JqLCBkZXB0aCwgY3R4KTtcblxuICAgIGNvbnN0IGlzV29ya2xldFJlZiA9ICdfd3ZpZCcgaW4gKHN1Yk9iaiBhcyBvYmplY3QpO1xuICAgIGlmIChpc1dvcmtsZXRSZWYpIHtcbiAgICAgIG9ialtrZXldID0gZ2V0RnJvbVdvcmtsZXRSZWZNYXAoXG4gICAgICAgIHN1Yk9iaiBhcyB1bmtub3duIGFzIFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc1dvcmtsZXQgPSAnX3drbHRJZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc1dvcmtsZXQpIHtcbiAgICAgIC8vIGBzdWJPYmpgIGlzIHdvcmtsZXQgY3R4LiBTaGFsbG93IGNvcHkgaXQgdG8gcHJldmVudCB0aGUgdHJhbnNmb3JtZWQgd29ya2xldCBmcm9tIHJlZmVyZW5jaW5nIGN0eC5cbiAgICAgIC8vIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSB2YWx1ZSBvZiBgd29ya2xldENhY2hlYCByZWZlcmVuY2luZyBpdHMga2V5LlxuICAgICAgb2JqW2tleV0gPSBseW54V29ya2xldEltcGwuX3dvcmtsZXRNYXBbKHN1Yk9iaiBhcyBXb3JrbGV0KS5fd2tsdElkXSFcbiAgICAgICAgLmJpbmQoeyAuLi5zdWJPYmogfSk7XG4gICAgICBvYmpba2V5XS5jdHhSZWYgPSBuZXcgV2Vha1JlZihzdWJPYmogYXMgb2JqZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0pzRm4gPSAnX2pzRm5JZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc0pzRm4pIHtcbiAgICAgIHN1Yk9ialsnX2V4ZWNJZCddID0gKGN0eCBhcyBXb3JrbGV0KS5fZXhlY0lkO1xuICAgICAgbHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcj8uYWRkUmVmKFxuICAgICAgICAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQhLFxuICAgICAgICBzdWJPYmosXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBpbml0V29ya2xldCB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IGluaXRBcGlFbnYgfSBmcm9tICcuL2FwaS9seW54QXBpLmpzJztcbmltcG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9IGZyb20gJy4vbGlzdGVuZXJzLmpzJztcbmltcG9ydCB7IGluaXRXb3JrbGV0IH0gZnJvbSAnLi93b3JrbGV0UnVudGltZS5qcyc7XG5cbmlmIChnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9PT0gdW5kZWZpbmVkKSB7XG4gIGluaXRXb3JrbGV0KCk7XG4gIGluaXRBcGlFbnYoKTtcbiAgaW5pdEV2ZW50TGlzdGVuZXJzKCk7XG59XG4iXSwibmFtZXMiOlsiQW5pbWF0aW9uIiwiX19FbGVtZW50QW5pbWF0ZSIsImVmZmVjdCIsIktleWZyYW1lRWZmZWN0IiwidGFyZ2V0Iiwia2V5ZnJhbWVzIiwib3B0aW9ucyIsIlRSQUNFX0xJTUlUIiwiREVGQVVMVF9GTFVTSF9MSU1JVCIsInRyYWNlIiwiZmx1c2hDb3VudEluV2luZG93IiwicmVzZXRTY2hlZHVsZWQiLCJ0cmlwcGVkRXJyb3IiLCJwdXNoVHJhY2UiLCJtYXJrZXIiLCJjb21wcmVzc1RyYWNlIiwibWFya2VycyIsIm91dCIsInByZXYiLCJjb3VudCIsImkiLCJjdXIiLCJtYWluVGhyZWFkRmx1c2hMb29wTWFyayIsIm1haW5UaHJlYWRGbHVzaExvb3BPbkZsdXNoTWljcm90YXNrIiwic2V0VGltZW91dCIsIm1haW5UaHJlYWRGbHVzaExvb3BSZXNldCIsImxpbWl0IiwidHJhY2VUZXh0IiwiRXJyb3IiLCJtYWluVGhyZWFkRmx1c2hMb29wUmVwb3J0IiwiZXJyb3IiLCJpc1Nka1ZlcnNpb25HdCIsIm1ham9yIiwibWlub3IiLCJfU3lzdGVtSW5mb19seW54U2RrVmVyc2lvbiIsImx5bnhTZGtWZXJzaW9uIiwidmVyc2lvbiIsIk51bWJlciIsIndpbGxGbHVzaCIsInNob3VsZEZsdXNoIiwic2V0U2hvdWxkRmx1c2giLCJ2YWx1ZSIsIkVsZW1lbnQiLCJuYW1lIiwiX19TZXRBdHRyaWJ1dGUiLCJfX0FkZElubGluZVN0eWxlIiwic3R5bGVzIiwiT2JqZWN0Iiwia2V5IiwiYXR0cmlidXRlTmFtZSIsIl9fR2V0QXR0cmlidXRlQnlOYW1lIiwiX19HZXRBdHRyaWJ1dGVOYW1lcyIsInNlbGVjdG9yIiwicmVmIiwiX19RdWVyeVNlbGVjdG9yIiwiX19RdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIl9fR2V0Q29tcHV0ZWRTdHlsZUJ5S2V5Iiwibm9ybWFsaXplZE9wdGlvbnMiLCJtZXRob2ROYW1lIiwicGFyYW1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfX0ludm9rZVVJTWV0aG9kIiwicmVzIiwiSlNPTiIsIl9fRmx1c2hFbGVtZW50VHJlZSIsIlBhZ2VFbGVtZW50IiwiX1BhZ2VFbGVtZW50IiwiX19HZXRQYWdlRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjc3NTZWxlY3RvciIsInBhZ2VFbGVtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImluaXRBcGlFbnYiLCJfbHlueF9jbGVhckludGVydmFsIiwibHlueCIsImdsb2JhbFRoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInJ1blJ1bk9uTWFpblRocmVhZFRhc2siLCJ0YXNrIiwicmVzb2x2ZUlkIiwicmV0dXJuVmFsdWUiLCJydW5Xb3JrbGV0IiwiV29ya2xldEV2ZW50cyIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiX2NvbnNvbGUiLCJfY29uc29sZTEiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsImV2ZW50IiwiZGF0YSIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsIl9mbk9iaiIsImRlbGF5SW5kaWNlcyIsImRldGFpbHMiLCJpbml0RXZlbnREZWxheSIsIk1hcCIsInJ1bkRlbGF5ZWRXb3JrbGV0IiwiY2xlYXJEZWxheWVkV29ya2xldHMiLCJkZWxheUV4ZWNVbnRpbEpzUmVhZHkiLCJoYXNoIiwibWFwIiwicGFyYW1WZWMiLCJ3b3JrbGV0IiwicGFyYW1zVmVjIiwibGVmdFBhcmFtc1ZlYyIsIl9maXJzdFBhcmFtX2N1cnJlbnRUYXJnZXQiLCJmaXJzdFBhcmFtIiwiaW5pdEVvbUltcGwiLCJFdmVudFJlc3VsdCIsImlzRXZlbnRPYmplY3QiLCJjdHgiLCJBcnJheSIsIlJ1bldvcmtsZXRTb3VyY2UiLCJhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCIsImV2ZW50Q3R4IiwiZXZlbnRPYmoiLCJfZXZlbnRDdHhfX2V2ZW50UmV0dXJuUmVzdWx0IiwiaHlkcmF0ZUN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJfZmlyc3RTY3JlZW5DdHhPYmpfa2V5X2N0eFJlZiIsImZpcnN0U2NyZWVuVmFsdWUiLCJyZWZJZCIsImx5bnhXb3JrbGV0SW1wbCIsImZuT2JqcyIsImZpcnN0U2NyZWVuRm5PYmpzIiwiZm5OYW1lIiwiZmlyc3RTY3JlZW5Gbk9iaiIsImluZGV4IiwiSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiLCJvYmpUb1JlZiIsIl90aGlzX2V4ZWNJZFJlZkNvdW50X2dldCIsInJjIiwiU2V0IiwiV2Vha1NldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsImZpcnN0IiwidCIsIlN0cmluZyIsInJ1bldvcmtsZXRJbXBsIiwidHJhbnNmb3JtV29ya2xldCIsInBhcmFtc18iLCJoYXNFdmVudE1ldGhvZHMiLCJyZXN1bHQiLCJ3b3JrbGV0Q2FjaGUiLCJXZWFrTWFwIiwiaXNXb3JrbGV0IiwidHJhbnNmb3JtV29ya2xldElubmVyIiwiZGVwdGgiLCJvYmoiLCJzdWJPYmoiLCJpc1dvcmtsZXRSZWYiLCJXZWFrUmVmIiwiaXNKc0ZuIiwiX2x5bnhXb3JrbGV0SW1wbF9fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVlPLE1BQU1BO1FBV0osU0FBZTtZQUVwQixPQUFPQyxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFB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
|
|
632
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2xldC1ydW50aW1lL2FwaS9hbmltYXRpb24vYW5pbWF0aW9uLnRzIiwiLi4vc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvYW5pbWF0aW9uL2VmZmVjdC50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLnRzIiwiLi4vc3JjL3dvcmtsZXQtcnVudGltZS91dGlscy92ZXJzaW9uLnRzIiwiLi4vc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvZWxlbWVudC50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvYXBpL2xlcHVzUXVlcnlTZWxlY3Rvci50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvYXBpL2x5bnhBcGkudHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL3J1bk9uTWFpblRocmVhZC50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvdXRpbHMvcHJvZmlsZS50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvd29ya2xldFJlZi50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvbGlzdGVuZXJzLnRzIiwiLi4vc3JjL3dvcmtsZXQtcnVudGltZS9kZWxheVJ1bk9uQmFja2dyb3VuZC50cyIsIi4uL3NyYy93b3JrbGV0LXJ1bnRpbWUvZGVsYXlXb3JrbGV0RXZlbnQudHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL2VvbUltcGwudHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL2V2ZW50UHJvcGFnYXRpb24udHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL2h5ZHJhdGUudHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL2pzRnVuY3Rpb25MaWZlY3ljbGUudHMiLCIuLi9zcmMvd29ya2xldC1ydW50aW1lL3dvcmtsZXRSdW50aW1lLnRzIiwiLi4vc3JjL3dvcmtsZXQtcnVudGltZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBLZXlmcmFtZUVmZmVjdCB9IGZyb20gJy4vZWZmZWN0LmpzJztcblxuZXhwb3J0IGVudW0gQW5pbWF0aW9uT3BlcmF0aW9uIHtcbiAgU1RBUlQgPSAwLCAvLyBTdGFydCBhIG5ldyBhbmltYXRpb25cbiAgUExBWSA9IDEsIC8vIFBsYXkvcmVzdW1lIGEgcGF1c2VkIGFuaW1hdGlvblxuICBQQVVTRSA9IDIsIC8vIFBhdXNlIGFuIGV4aXN0aW5nIGFuaW1hdGlvblxuICBDQU5DRUwgPSAzLCAvLyBDYW5jZWwgYW4gYW5pbWF0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb24ge1xuICBzdGF0aWMgY291bnQgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgZWZmZWN0OiBLZXlmcmFtZUVmZmVjdDtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZWZmZWN0OiBLZXlmcmFtZUVmZmVjdCkge1xuICAgIHRoaXMuZWZmZWN0ID0gZWZmZWN0O1xuICAgIHRoaXMuaWQgPSAnX19seW54LWlubmVyLWpzLWFuaW1hdGlvbi0nICsgQW5pbWF0aW9uLmNvdW50Kys7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5DQU5DRUwsIHRoaXMuaWRdKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5QQVVTRSwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHVibGljIHBsYXkoKTogdm9pZCB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBtZW1iZXIgJ2VsZW1lbnQnXG4gICAgcmV0dXJuIF9fRWxlbWVudEFuaW1hdGUodGhpcy5lZmZlY3QudGFyZ2V0LmVsZW1lbnQsIFtBbmltYXRpb25PcGVyYXRpb24uUExBWSwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydCgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW1xuICAgICAgQW5pbWF0aW9uT3BlcmF0aW9uLlNUQVJULFxuICAgICAgdGhpcy5pZCxcbiAgICAgIHRoaXMuZWZmZWN0LmtleWZyYW1lcyxcbiAgICAgIHRoaXMuZWZmZWN0Lm9wdGlvbnMsXG4gICAgXSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEVsZW1lbnQgfSBmcm9tICcuLi9lbGVtZW50LmpzJztcblxuZXhwb3J0IGNsYXNzIEtleWZyYW1lRWZmZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogRWxlbWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YXJnZXQ6IEVsZW1lbnQsXG4gICAga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W10sXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPixcbiAgKSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy5rZXlmcmFtZXMgPSBrZXlmcmFtZXM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjYgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cblxuY29uc3QgVFJBQ0VfTElNSVQgPSAyNTY7XG5jb25zdCBERUZBVUxUX0ZMVVNIX0xJTUlUID0gMjU2O1xuXG5sZXQgdHJhY2U6IHN0cmluZ1tdID0gW107XG5cbmxldCBmbHVzaENvdW50SW5XaW5kb3cgPSAwO1xubGV0IHJlc2V0U2NoZWR1bGVkID0gZmFsc2U7XG5sZXQgdHJpcHBlZEVycm9yOiBFcnJvciB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBwdXNoVHJhY2UobWFya2VyOiBzdHJpbmcpOiB2b2lkIHtcbiAgdHJhY2UucHVzaChtYXJrZXIpO1xuICBpZiAodHJhY2UubGVuZ3RoID4gVFJBQ0VfTElNSVQpIHtcbiAgICB0cmFjZSA9IHRyYWNlLnNsaWNlKHRyYWNlLmxlbmd0aCAtIFRSQUNFX0xJTUlUKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wcmVzc1RyYWNlKG1hcmtlcnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgLy8gRGlzcGxheSBtb3N0LXJlY2VudC1maXJzdCB0byBtYWtlIGxvb3BzIGVhc2llciB0byByZWFkLlxuICBsZXQgcHJldiA9IG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXSE7XG4gIGxldCBjb3VudCA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IG1hcmtlcnMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjdXIgPSBtYXJrZXJzW2ldITtcbiAgICBpZiAoY3VyID09PSBwcmV2KSB7XG4gICAgICBjb3VudCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dC5wdXNoKGNvdW50ID09PSAxID8gcHJldiA6IGAke3ByZXZ9IHgke2NvdW50fWApO1xuICAgIHByZXYgPSBjdXI7XG4gICAgY291bnQgPSAxO1xuICB9XG4gIG91dC5wdXNoKGNvdW50ID09PSAxID8gcHJldiA6IGAke3ByZXZ9IHgke2NvdW50fWApO1xuICByZXR1cm4gb3V0LmpvaW4oJyA8LSAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKG1hcmtlcjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgcHVzaFRyYWNlKG1hcmtlcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BPbkZsdXNoTWljcm90YXNrKCk6IEVycm9yIHwgbnVsbCB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDEgKi9cbiAgaWYgKCFfX0RFVl9fKSByZXR1cm4gbnVsbDtcbiAgaWYgKHRyaXBwZWRFcnJvcikgcmV0dXJuIHRyaXBwZWRFcnJvcjtcblxuICBpZiAoIXJlc2V0U2NoZWR1bGVkKSB7XG4gICAgcmVzZXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbWFpblRocmVhZEZsdXNoTG9vcFJlc2V0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBmbHVzaENvdW50SW5XaW5kb3crKztcbiAgY29uc3QgbGltaXQgPSBERUZBVUxUX0ZMVVNIX0xJTUlUO1xuICBpZiAoZmx1c2hDb3VudEluV2luZG93ID4gbGltaXQpIHtcbiAgICBjb25zdCB0cmFjZVRleHQgPSBjb21wcmVzc1RyYWNlKHRyYWNlKTtcbiAgICB0cmlwcGVkRXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgW1JlYWN0THlueF1bREVWXSBNYWluVGhyZWFkIGZsdXNoIGxvb3AgZGV0ZWN0ZWQ6IHJlbmRlciBleGVjdXRlZCAke2ZsdXNoQ291bnRJbldpbmRvd30gdGltZXMgd2l0aG91dCB5aWVsZGluZyAobGltaXQ9JHtsaW1pdH0pLiBUcmFjZTogJHt0cmFjZVRleHR9YCxcbiAgICApO1xuICAgIHJldHVybiB0cmlwcGVkRXJyb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gIGlmIChfX0RFVl9fKSB7XG4gICAgLy8gVGhyb3cgb24gbWFjcm90YXNrIHRvIGF2b2lkIFByb21pc2UtdW5oYW5kbGVkLXJlamVjdGlvbiBub2lzZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWluVGhyZWFkRmx1c2hMb29wUmVzZXQoKTogdm9pZCB7XG4gIHRyYWNlID0gW107XG4gIGZsdXNoQ291bnRJbldpbmRvdyA9IDA7XG4gIHJlc2V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIHRyaXBwZWRFcnJvciA9IG51bGw7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuZXhwb3J0IGZ1bmN0aW9uIGlzU2RrVmVyc2lvbkd0KG1ham9yOiBudW1iZXIsIG1pbm9yOiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgbHlueFNka1ZlcnNpb246IHN0cmluZyA9IFN5c3RlbUluZm8ubHlueFNka1ZlcnNpb24gPz8gJzEuMCc7XG4gIGNvbnN0IHZlcnNpb24gPSBseW54U2RrVmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gKFxuICAgIE51bWJlcih2ZXJzaW9uWzBdKSA+IG1ham9yXG4gICAgfHwgKE51bWJlcih2ZXJzaW9uWzBdKSA9PSBtYWpvciAmJiBOdW1iZXIodmVyc2lvblsxXSkgPiBtaW5vcilcbiAgKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBBbmltYXRpb24gfSBmcm9tICcuL2FuaW1hdGlvbi9hbmltYXRpb24uanMnO1xuaW1wb3J0IHsgS2V5ZnJhbWVFZmZlY3QgfSBmcm9tICcuL2FuaW1hdGlvbi9lZmZlY3QuanMnO1xuaW1wb3J0IHtcbiAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmssXG4gIG1haW5UaHJlYWRGbHVzaExvb3BPbkZsdXNoTWljcm90YXNrLFxuICBtYWluVGhyZWFkRmx1c2hMb29wUmVwb3J0LFxufSBmcm9tICcuLi91dGlscy9tYWluVGhyZWFkRmx1c2hMb29wR3VhcmQuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuLi91dGlscy92ZXJzaW9uLmpzJztcblxubGV0IHdpbGxGbHVzaCA9IGZhbHNlO1xubGV0IHNob3VsZEZsdXNoID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNob3VsZEZsdXNoKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gIHNob3VsZEZsdXNoID0gdmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50IHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBzZXQgaW4gY29uc3RydWN0b3JcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50Tm9kZTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50Tm9kZSkge1xuICAgIC8vIEluIEx5bnggdmVyc2lvbnMgcHJpb3IgdG8gYW5kIGluY2x1ZGluZyAyLjE1LFxuICAgIC8vIGEgY3Jhc2ggb2NjdXJzIHdoZW4gcHJpbnRpbmcgb3IgdHJhbnNmZXJyaW5nIHJlZkNvdW50ZWQgYWNyb3NzIHRocmVhZHMuXG4gICAgLy8gQnlwYXNzIHRoaXMgcHJvYmxlbSBieSBoaWRpbmcgdGhlIGVsZW1lbnQgb2JqZWN0LlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZWxlbWVudCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDpzZXRBdHRyaWJ1dGUgJHtuYW1lfWApO1xuICAgIH1cbiAgICBfX1NldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYGVsZW1lbnQ6c2V0U3R5bGVQcm9wZXJ0eSAke25hbWV9YCk7XG4gICAgfVxuICAgIF9fQWRkSW5saW5lU3R5bGUodGhpcy5lbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVQcm9wZXJ0aWVzKHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIC8qIHY4IGlnbm9yZSBuZXh0IDUgKi9cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoXG4gICAgICAgIGBlbGVtZW50OnNldFN0eWxlUHJvcGVydGllcyBrZXlzPSR7T2JqZWN0LmtleXMoc3R5bGVzKS5sZW5ndGh9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIGtleSwgc3R5bGVzW2tleV0hKTtcbiAgICB9XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZUJ5TmFtZSh0aGlzLmVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gX19HZXRBdHRyaWJ1dGVOYW1lcyh0aGlzLmVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCByZWYgPSBfX1F1ZXJ5U2VsZWN0b3IodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pO1xuICAgIHJldHVybiByZWYgPyBuZXcgRWxlbWVudChyZWYpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50W10ge1xuICAgIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGVQcm9wZXJ0eShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFpc1Nka1ZlcnNpb25HdCgzLCA0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5IHJlcXVpcmVzIEx5bnggc2RrIHZlcnNpb24gMy41JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5OiBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIF9fR2V0Q29tcHV0ZWRTdHlsZUJ5S2V5KHRoaXMuZWxlbWVudCwga2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRlKFxuICAgIGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdLFxuICAgIG9wdGlvbnM/OiBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApOiBBbmltYXRpb24ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInID8geyBkdXJhdGlvbjogb3B0aW9ucyB9IDogb3B0aW9ucyA/PyB7fTtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihuZXcgS2V5ZnJhbWVFZmZlY3QodGhpcywga2V5ZnJhbWVzLCBub3JtYWxpemVkT3B0aW9ucykpO1xuICB9XG5cbiAgcHVibGljIGludm9rZShcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYGVsZW1lbnQ6aW52b2tlICR7bWV0aG9kTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIF9fSW52b2tlVUlNZXRob2QoXG4gICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGFyYW1zID8/IHt9LFxuICAgICAgICAocmVzOiB7IGNvZGU6IG51bWJlcjsgZGF0YTogdW5rbm93biB9KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVUkgbWV0aG9kIGludm9rZTogJyArIEpTT04uc3RyaW5naWZ5KHJlcykpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoRWxlbWVudFRyZWUoKSB7XG4gICAgaWYgKHdpbGxGbHVzaCB8fCAhc2hvdWxkRmx1c2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2lsbEZsdXNoID0gdHJ1ZTtcbiAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgd2lsbEZsdXNoID0gZmFsc2U7XG4gICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyaygncmVuZGVyJyk7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2soKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgLy8gU3RvcCBzY2hlZHVsaW5nIGZ1cnRoZXIgZmx1c2hlcyBzbyB3ZSBjYW4gc3VyZmFjZSB0aGUgZXJyb3IuXG4gICAgICAgICAgLy8gVGhpcyBpcyBERVYtb25seSBiZWhhdmlvciBndWFyZGVkIGludGVybmFsbHkgYnkgdGhlIGRldiBndWFyZC5cbiAgICAgICAgICBzaG91bGRGbHVzaCA9IGZhbHNlO1xuICAgICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX19GbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50LmpzJztcblxuY2xhc3MgUGFnZUVsZW1lbnQge1xuICBwcml2YXRlIHN0YXRpYyBwYWdlRWxlbWVudDogRWxlbWVudE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgc3RhdGljIGdldCgpIHtcbiAgICBQYWdlRWxlbWVudC5wYWdlRWxlbWVudCA/Pz0gX19HZXRQYWdlRWxlbWVudCgpO1xuICAgIHJldHVybiBQYWdlRWxlbWVudC5wYWdlRWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3Rvcihjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBwYWdlRWxlbWVudCA9IFBhZ2VFbGVtZW50LmdldCgpO1xuICBpZiAoIXBhZ2VFbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZWxlbWVudCA9IF9fUXVlcnlTZWxlY3RvcihwYWdlRWxlbWVudCwgY3NzU2VsZWN0b3IsIHt9KTtcbiAgcmV0dXJuIGVsZW1lbnQgPyBuZXcgRWxlbWVudChlbGVtZW50KSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50W10ge1xuICBjb25zdCBwYWdlRWxlbWVudCA9IFBhZ2VFbGVtZW50LmdldCgpO1xuICBpZiAoIXBhZ2VFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwocGFnZUVsZW1lbnQsIGNzc1NlbGVjdG9yLCB7fSkubWFwKFxuICAgIChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSxcbiAgKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBxdWVyeVNlbGVjdG9yLCBxdWVyeVNlbGVjdG9yQWxsIH0gZnJvbSAnLi9sZXB1c1F1ZXJ5U2VsZWN0b3IuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuLi91dGlscy92ZXJzaW9uLmpzJztcblxuZnVuY3Rpb24gaW5pdEFwaUVudigpOiB2b2lkIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvciA9IHF1ZXJ5U2VsZWN0b3I7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBseW54LnF1ZXJ5U2VsZWN0b3JBbGwgPSBxdWVyeVNlbGVjdG9yQWxsO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5zZXRUaW1lb3V0ID0gbHlueC5zZXRUaW1lb3V0IGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldEludGVydmFsID0gbHlueC5zZXRJbnRlcnZhbCBhcyAoY2I6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQgPSBseW54LmNsZWFyVGltZW91dCBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuICAvLyBJbiBseW54IDIuMTQgYGNsZWFySW50ZXJ2YWxgIGlzIG1pc3Rha2VubHkgc3BlbGxlZCBhcyBgY2xlYXJUaW1lSW50ZXJ2YWxgLiBUaGlzIGlzIGZpeGVkIGluIGx5bnggMi4xNS5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbCA9IChseW54LmNsZWFySW50ZXJ2YWwgPz8gbHlueC5jbGVhclRpbWVJbnRlcnZhbCkgYXMgKHRpbWVvdXQ6IG51bWJlcikgPT4gdm9pZDtcblxuICB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYXMgKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiBudW1iZXI7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgaWYgKCFpc1Nka1ZlcnNpb25HdCgyLCAxNSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW4gbWFpbiB0aHJlYWQgc2NyaXB0IHJlcXVpcmVzIEx5bnggc2RrIHZlcnNpb24gMi4xNicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBseW54LmNhbmNlbEFuaW1hdGlvbkZyYW1lIGFzIChyZXF1ZXN0SWQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHsgaW5pdEFwaUVudiB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgUnVuV29ya2xldEN0eFJldERhdGEsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blJ1bk9uTWFpblRocmVhZFRhc2sodGFzazogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sIHJlc29sdmVJZDogbnVtYmVyKTogdm9pZCB7XG4gIGxldCByZXR1cm5WYWx1ZTtcbiAgdHJ5IHtcbiAgICByZXR1cm5WYWx1ZSA9IHJ1bldvcmtsZXQodGFzaywgcGFyYW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBUT0RPOiBTaG91bGQgYmUgbW9yZSBwcm9wZXIgdG8gcmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgIGx5bnguZ2V0SlNDb250ZXh0KCkuZGlzcGF0Y2hFdmVudCh7XG4gICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLkZ1bmN0aW9uQ2FsbFJldCxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVzb2x2ZUlkLFxuICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgIH0gYXMgUnVuV29ya2xldEN0eFJldERhdGEpLFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGU8UmV0LCBGbiBleHRlbmRzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJldD4oXG4gIHNsaWNlTmFtZTogc3RyaW5nLFxuICBmOiBGbixcbik6IFJldCB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDkgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGl0IHRvIF9fUFJPRklMRV9fXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc29sZS5wcm9maWxlPy4oc2xpY2VOYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGYoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc29sZS5wcm9maWxlRW5kPy4oKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGYoKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2FwaS9lbGVtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2xldFJlZiwgV29ya2xldFJlZklkLCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsgfSBmcm9tICcuL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIFJlZkltcGwge1xuICBfd29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IFJlY29yZDxXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWY8dW5rbm93bj4+O1xuICB1cGRhdGVXb3JrbGV0UmVmKFxuICAgIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4gICk6IHZvaWQ7XG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKHBhdGNoOiBbbnVtYmVyLCB1bmtub3duXVtdKTogdm9pZDtcbiAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJlZkltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0UmVmKCk6IFJlZkltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX3dvcmtsZXRSZWZNYXA6IHt9LFxuICAgIC8qKlxuICAgICAqIE1hcCBvZiB3b3JrbGV0IHJlZnMgdGhhdCBhcmUgY3JlYXRlZCBkdXJpbmcgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZy5cbiAgICAgKiBUaGVzZSByZWZzIGFyZSBjcmVhdGVkIHdpdGggbmVnYXRpdmUgSURzIGFuZCBuZWVkIHRvIGJlIGh5ZHJhdGVkXG4gICAgICogd2hlbiB0aGUgYXBwIHN0YXJ0cy4gVGhlIG1hcCBpcyBjbGVhcmVkIGFmdGVyIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZVxuICAgICAqIHRvIGZyZWUgdXAgbWVtb3J5LlxuICAgICAqL1xuICAgIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IHt9LFxuICAgIHVwZGF0ZVdvcmtsZXRSZWYsXG4gICAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG4gICAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAsXG4gIH0pO1xufVxuXG5jb25zdCBjcmVhdGVXb3JrbGV0UmVmID0gPFQ+KFxuICBpZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogVCxcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IHZhbHVlLFxuICAgIF93dmlkOiBpZCxcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZyb21Xb3JrbGV0UmVmTWFwID0gPFQ+KFxuICByZWZJbXBsOiBXb3JrbGV0UmVmSW1wbDxUPixcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICBjb25zdCBpZCA9IHJlZkltcGwuX3d2aWQ7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKF9fREVWX18pIHtcbiAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgTWFpblRocmVhZFJlZjpnZXQgaWQ9JHtpZH1gKTtcbiAgfVxuICBsZXQgdmFsdWU7XG4gIGlmIChpZCA8IDApIHtcbiAgICAvLyBBdCB0aGUgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZywgdGhlIHdvcmtsZXQgcmVmIGlzIGNyZWF0ZWQgd2l0aCBhIG5lZ2F0aXZlIElELlxuICAgIC8vIE1pZ2h0IGJlIGNhbGxlZCBpbiB0d28gc2NlbmFyaW9zOlxuICAgIC8vIDEuIEluIE1UUyBldmVudHNcbiAgICAvLyAyLiBJbiBgbWFpbi10aHJlYWQ6cmVmYFxuICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gYXMgV29ya2xldFJlZjxUPjtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IGltcGwhLl9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXBbaWRdID0gY3JlYXRlV29ya2xldFJlZihpZCwgcmVmSW1wbC5faW5pdFZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gYXMgV29ya2xldFJlZjxUPjtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKF9fREVWX18gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWFpblRocmVhZFJlZiBpcyBub3QgaW5pdGlhbGl6ZWQ6ICcgKyBpZCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZnVuY3Rpb24gcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcChpZDogV29ya2xldFJlZklkKTogdm9pZCB7XG4gIGRlbGV0ZSBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQgbm9kZSwgdGhlbiBzZXQgdGhlIHdvcmtsZXQgdmFsdWUgdG8gaXQuXG4gKiBUaGlzIGlzIGNhbGxlZCBpbiBgc25hcHNob3RDb250ZXh0VXBkYXRlV29ya2xldFJlZmAuXG4gKiBAcGFyYW0gaGFuZGxlIGhhbmRsZSBvZiB0aGUgd29ya2xldCB2YWx1ZS5cbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtsZXRSZWYoXG4gIGhhbmRsZTogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4pOiB2b2lkIHtcbiAgZ2V0RnJvbVdvcmtsZXRSZWZNYXAoaGFuZGxlKS5jdXJyZW50ID0gZWxlbWVudFxuICAgID8gbmV3IEVsZW1lbnQoZWxlbWVudClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKFxuICBwYXRjaDogW1dvcmtsZXRSZWZJZCwgdW5rbm93bl1bXSxcbik6IHZvaWQge1xuICBwcm9maWxlKCd1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcycsICgpID0+IHtcbiAgICBwYXRjaC5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKCFpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0pIHtcbiAgICAgICAgaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdID0gY3JlYXRlV29ya2xldFJlZihpZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZCB7XG4gIGltcGwhLl9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXAgPSB7fTtcbn1cblxuZXhwb3J0IHtcbiAgdHlwZSBSZWZJbXBsLFxuICBjcmVhdGVXb3JrbGV0UmVmLFxuICBpbml0V29ya2xldFJlZixcbiAgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsXG4gIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAsXG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzLFxufTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWxlYXNlV29ya2xldFJlZkRhdGEsIFJ1bldvcmtsZXRDdHhEYXRhIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBydW5SdW5Pbk1haW5UaHJlYWRUYXNrIH0gZnJvbSAnLi9ydW5Pbk1haW5UaHJlYWQuanMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCB9IGZyb20gJy4vdHlwZXMvcnVudGltZVByb3h5LmpzJztcbmltcG9ydCB7IHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAgfSBmcm9tICcuL3dvcmtsZXRSZWYuanMnO1xuXG5mdW5jdGlvbiBpbml0RXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gIGNvbnN0IGpzQ29udGV4dCA9IGx5bnguZ2V0SlNDb250ZXh0KCk7XG4gIGpzQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKFxuICAgIFdvcmtsZXRFdmVudHMucnVuV29ya2xldEN0eCxcbiAgICAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhIGFzIHN0cmluZykgYXMgUnVuV29ya2xldEN0eERhdGE7XG4gICAgICBydW5SdW5Pbk1haW5UaHJlYWRUYXNrKGRhdGEud29ya2xldCwgZGF0YS5wYXJhbXMgYXMgQ2xvc3VyZVZhbHVlVHlwZVtdLCBkYXRhLnJlc29sdmVJZCk7XG4gICAgfSxcbiAgKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5yZWxlYXNlV29ya2xldFJlZixcbiAgICAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKChldmVudC5kYXRhIGFzIFJlbGVhc2VXb3JrbGV0UmVmRGF0YSkuaWQpO1xuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgSnNGbkhhbmRsZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuXG5pbnRlcmZhY2UgRGV0YWlscyB7XG4gIHRhc2s6IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8vIFRoaXMgY29tZXMgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQsIGluc2VydGVkIGhlcmUgZHVyaW5nIGN0eCBoeWRyYXRpb24uXG4gIGpzRm5IYW5kbGU/OiBKc0ZuSGFuZGxlO1xufVxuXG5pbnRlcmZhY2UgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgLy8gRWxlbWVudHMgc2hvdWxkIGtlZXAgdGhlIG9yZGVyIGJlaW5nIGNhbGxlZCBieSB0aGUgdXNlci5cbiAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBEZXRhaWxzW107XG4gIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCBmbjogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKTogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIGRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheTogW10sXG4gICAgZGVsYXlSdW5PbkJhY2tncm91bmQsXG4gICAgcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheVJ1bk9uQmFja2dyb3VuZChmbk9iajogSnNGbkhhbmRsZSwgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5LnB1c2goeyB0YXNrIH0pO1xuICBjb25zdCBkZWxheUluZGljZXMgPSBmbk9iai5fZGVsYXlJbmRpY2VzID8/PSBbXTtcbiAgZGVsYXlJbmRpY2VzLnB1c2goaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCAtIDEpO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBkZXRhaWxzIG9mIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheSkge1xuICAgIGlmIChkZXRhaWxzLmpzRm5IYW5kbGUpIHtcbiAgICAgIGRldGFpbHMudGFzayhkZXRhaWxzLmpzRm5IYW5kbGUuX2pzRm5JZCEsIGRldGFpbHMuanNGbkhhbmRsZS5fZXhlY0lkISk7XG4gICAgfVxuICB9XG4gIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5sZW5ndGggPSAwO1xufVxuXG5leHBvcnQgeyB0eXBlIFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCwgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBXb3JrbGV0IH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIEV2ZW50RGVsYXlJbXBsIHtcbiAgX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwOiBNYXA8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlW11bXT47XG4gIHJ1bkRlbGF5ZWRXb3JrbGV0KHdvcmtsZXQ6IFdvcmtsZXQsIGVsZW1lbnQ6IEVsZW1lbnROb2RlKTogdm9pZDtcbiAgY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IEV2ZW50RGVsYXlJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0RXZlbnREZWxheSgpOiBFdmVudERlbGF5SW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IG5ldyBNYXAoKSxcbiAgICBydW5EZWxheWVkV29ya2xldCxcbiAgICBjbGVhckRlbGF5ZWRXb3JrbGV0cyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5RXhlY1VudGlsSnNSZWFkeShcbiAgaGFzaDogc3RyaW5nLFxuICBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbik6IHZvaWQge1xuICBwcm9maWxlKCdkZWxheUV4ZWNVbnRpbEpzUmVhZHk6ICcgKyBoYXNoLCAoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwO1xuICAgIGNvbnN0IHBhcmFtVmVjID0gbWFwLmdldChoYXNoKTtcbiAgICBpZiAocGFyYW1WZWMpIHtcbiAgICAgIHBhcmFtVmVjLnB1c2gocGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwLnNldChoYXNoLCBbcGFyYW1zXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkIHtcbiAgcHJvZmlsZSgnY29tbWl0RGVsYXllZFdvcmtsZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zVmVjID0gaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLmdldChcbiAgICAgIHdvcmtsZXQuX3drbHRJZCxcbiAgICApO1xuICAgIGlmIChwYXJhbXNWZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsZWZ0UGFyYW1zVmVjOiBDbG9zdXJlVmFsdWVUeXBlW11bXSA9IFtdO1xuICAgIHBhcmFtc1ZlYy5mb3JFYWNoKChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0UGFyYW0gPSBwYXJhbXNbMF0gYXMgeyBjdXJyZW50VGFyZ2V0PzogeyBlbGVtZW50UmVmcHRyPzogRWxlbWVudE5vZGUgfSB9IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGZpcnN0UGFyYW0/LmN1cnJlbnRUYXJnZXQ/LmVsZW1lbnRSZWZwdHIgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcHJvZmlsZSgncnVuRGVsYXllZFdvcmtsZXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBydW5Xb3JrbGV0KHdvcmtsZXQsIHBhcmFtcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdFBhcmFtc1ZlYy5wdXNoKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLnNldChcbiAgICAgIHdvcmtsZXQuX3drbHRJZCxcbiAgICAgIGxlZnRQYXJhbXNWZWMsXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRGVsYXllZFdvcmtsZXRzKCk6IHZvaWQge1xuICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuY2xlYXIoKTtcbn1cblxuZXhwb3J0IHsgdHlwZSBFdmVudERlbGF5SW1wbCwgaW5pdEV2ZW50RGVsYXksIGRlbGF5RXhlY1VudGlsSnNSZWFkeSwgcnVuRGVsYXllZFdvcmtsZXQsIGNsZWFyRGVsYXllZFdvcmtsZXRzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgc2V0U2hvdWxkRmx1c2ggfSBmcm9tICcuL2FwaS9lbGVtZW50LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBFb21JbXBsIHtcbiAgc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEVvbUltcGwoKTogRW9tSW1wbCB7XG4gIHJldHVybiB7XG4gICAgc2V0U2hvdWxkRmx1c2gsXG4gIH07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEV2ZW50Q3R4LCBSdW5Xb3JrbGV0T3B0aW9ucyB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgUnVuV29ya2xldFNvdXJjZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuXG4vLyBFdmVudFJlc3VsdCBlbnVtIHZhbHVlc1xuZXhwb3J0IGNvbnN0IEV2ZW50UmVzdWx0ID0ge1xuICBrRGVmYXVsdDogMHgwLFxuICBrU3RvcFByb3BhZ2F0aW9uTWFzazogMHgxLFxuICBrU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uTWFzazogMHgyLFxufSBhcyBjb25zdDtcblxudHlwZSBFdmVudExpa2UgPSBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRPYmplY3QoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuICBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMsXG4pOiBjdHggaXMgW0V2ZW50TGlrZSwgLi4uQ2xvc3VyZVZhbHVlVHlwZVtdXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjdHgpIHx8IHR5cGVvZiBjdHhbMF0gIT09ICdvYmplY3QnIHx8IGN0eFswXSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNvdXJjZSA9PT0gUnVuV29ya2xldFNvdXJjZS5FVkVOVCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgZXZlbnQgbWV0aG9kcyB0byBhbiBldmVudCBvYmplY3QgaWYgbmVlZGVkXG4gKiBAcGFyYW0gY3R4IFRoZSBldmVudCBvYmplY3QgdG8gZW5oYW5jZVxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHJ1biB3b3JrbGV0IG9wdGlvbnNcbiAqIEByZXR1cm5zIEEgdHVwbGUgb2YgYm9vbGVhbiBhbmQgdGhlIGV2ZW50IHJldHVybiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50TWV0aG9kc0lmTmVlZGVkKGN0eDogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiBbYm9vbGVhbiwgRXZlbnRDdHhdIHtcbiAgaWYgKCFpc0V2ZW50T2JqZWN0KGN0eCwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gW2ZhbHNlLCB7fV07XG4gIH1cbiAgY29uc3QgZXZlbnRDdHg6IEV2ZW50Q3R4ID0ge307XG4gIGNvbnN0IGV2ZW50T2JqID0gY3R4WzBdO1xuXG4gIC8vIEFkZCBzdG9wUHJvcGFnYXRpb24gbWV0aG9kXG4gIGV2ZW50T2JqWydzdG9wUHJvcGFnYXRpb24nXSA9IGZ1bmN0aW9uKCkge1xuICAgIGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA9IChldmVudEN0eC5fZXZlbnRSZXR1cm5SZXN1bHQgPz8gRXZlbnRSZXN1bHQua0RlZmF1bHQpXG4gICAgICB8IEV2ZW50UmVzdWx0LmtTdG9wUHJvcGFnYXRpb25NYXNrO1xuICB9O1xuXG4gIC8vIEFkZCBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gbWV0aG9kXG4gIGV2ZW50T2JqWydzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24nXSA9IGZ1bmN0aW9uKCkge1xuICAgIGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA9IChldmVudEN0eC5fZXZlbnRSZXR1cm5SZXN1bHQgPz8gRXZlbnRSZXN1bHQua0RlZmF1bHQpXG4gICAgICB8IEV2ZW50UmVzdWx0LmtTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25NYXNrO1xuICB9O1xuXG4gIHJldHVybiBbdHJ1ZSwgZXZlbnRDdHhdO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cblxuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBKc0ZuSGFuZGxlLCBXb3JrbGV0LCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXQgY29udGV4dCB3aXRoIGRhdGEgZnJvbSBhIGZpcnN0LXNjcmVlbiBXb3JrbGV0IGNvbnRleHQuXG4gKiBUaGlzIHByb2Nlc3MgaXMgdHlwaWNhbGx5IHVzZWQgdG8gcnVuIGFsbCBkZWxheWVkIGBydW5PbkJhY2tncm91bmRgIGZ1bmN0aW9uc1xuICogYW5kIGluaXRpYWxpemUgYFdvcmtsZXRSZWZgIHZhbHVlcyBtb2RpZmllZCBiZWZvcmUgaHlkcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBjdHggVGhlIHRhcmdldCBXb3JrbGV0IGNvbnRleHQgdG8gYmUgaHlkcmF0ZWQuXG4gKiBAcGFyYW0gZmlyc3RTY3JlZW5DdHggVGhlIFdvcmtsZXQgY29udGV4dCBmcm9tIHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLFxuICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gaHlkcmF0ZSB3aXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZUN0eChjdHg6IFdvcmtsZXQsIGZpcnN0U2NyZWVuQ3R4OiBXb3JrbGV0KTogdm9pZCB7XG4gIHByb2ZpbGUoJ2h5ZHJhdGVDdHgnLCAoKSA9PiB7XG4gICAgaHlkcmF0ZUN0eEltcGwoY3R4LCBmaXJzdFNjcmVlbkN0eCwgY3R4Ll9leGVjSWQhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVDdHhJbXBsKFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGZpcnN0U2NyZWVuQ3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBleGVjSWQ6IG51bWJlcixcbik6IHZvaWQge1xuICBpZiAoXG4gICAgIWN0eCB8fCB0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyB8fCAhZmlyc3RTY3JlZW5DdHhcbiAgICB8fCB0eXBlb2YgZmlyc3RTY3JlZW5DdHggIT09ICdvYmplY3QnXG4gICkgcmV0dXJuO1xuXG4gIGNvbnN0IGN0eE9iaiA9IGN0eCBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcbiAgY29uc3QgZmlyc3RTY3JlZW5DdHhPYmogPSBmaXJzdFNjcmVlbkN0eCBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcblxuICBpZiAoY3R4T2JqWydfd2tsdElkJ10gJiYgY3R4T2JqWydfd2tsdElkJ10gIT09IGZpcnN0U2NyZWVuQ3R4T2JqWydfd2tsdElkJ10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZvci1pbi1hcnJheVxuICBmb3IgKGNvbnN0IGtleSBpbiBjdHgpIHtcbiAgICBpZiAoa2V5ID09PSAnX3d2aWQnKSB7XG4gICAgICBoeWRyYXRlTWFpblRocmVhZFJlZihcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgV29ya2xldFJlZklkLFxuICAgICAgICBmaXJzdFNjcmVlbkN0eE9iaiBhcyB1bmtub3duIGFzIFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ19qc0ZuJykge1xuICAgICAgaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MoXG4gICAgICAgIGN0eE9ialtrZXldIGFzIFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LFxuICAgICAgICBmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LFxuICAgICAgICBleGVjSWQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdFNjcmVlblZhbHVlID0gdHlwZW9mIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAoZmlyc3RTY3JlZW5DdHhPYmpba2V5XSBhcyB7IGN0eFJlZj86IFdlYWtSZWY8b2JqZWN0PiB9KS5jdHhSZWY/LmRlcmVmKCkgYXMgQ2xvc3VyZVZhbHVlVHlwZVxuICAgICAgICA6IGZpcnN0U2NyZWVuQ3R4T2JqW2tleV07XG4gICAgICBoeWRyYXRlQ3R4SW1wbChjdHhPYmpba2V5XSwgZmlyc3RTY3JlZW5WYWx1ZSwgZXhlY0lkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXRSZWYgb24gdGhlIG1haW4gdGhyZWFkLlxuICogVGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgV29ya2xldFJlZidzIGJhY2tncm91bmQgaW5pdGlhbCB2YWx1ZSBiYXNlZCBvbiBjaGFuZ2VzXG4gKiB0aGF0IG9jY3VycmVkIGluIHRoZSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0IGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIHJlZklkIFRoZSBJRCBvZiB0aGUgV29ya2xldFJlZiB0byBoeWRyYXRlLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBXb3JrbGV0UmVmLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlTWFpblRocmVhZFJlZihcbiAgcmVmSWQ6IFdvcmtsZXRSZWZJZCxcbiAgdmFsdWU6IFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuKSB7XG4gIGlmICgnX2luaXRWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAvLyBUaGUgcmVmIGhhcyBub3QgYmVlbiBhY2Nlc3NlZCB5ZXQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGx5bnhXb3JrbGV0SW1wbCEuX3JlZkltcGwuX3dvcmtsZXRSZWZNYXBbcmVmSWRdID0gdmFsdWU7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGlmIChmaXJzdFNjcmVlbkZuT2JqKSB7XG4gICAgICAgIGZpcnN0U2NyZWVuRm5PYmouX2lzRmlyc3RTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpcnN0U2NyZWVuRm5PYmosIGZuT2JqKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbFxuICAgICAgICAuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5W2luZGV4XSE7XG4gICAgICBmbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgZGV0YWlscy5qc0ZuSGFuZGxlID0gZm5PYmo7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHJldGFpbmVkT2JqZWN0cyA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcbiAgcHJpdmF0ZSB3aWxsRmlyZSA9IGZhbHNlO1xuICBwcml2YXRlIHJlZ2lzdHJ5PzogRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPiA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlZ2lzdHJ5ID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5PG51bWJlcj4odGhpcy5yZW1vdmVSZWYuYmluZCh0aGlzKSk7XG4gIH1cblxuICBhZGRSZWYoZXhlY0lkOiBudW1iZXIsIG9ialRvUmVmOiBvYmplY3QpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXRhaW5lZE9iamVjdHMuaGFzKG9ialRvUmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJldGFpbmVkT2JqZWN0cy5hZGQob2JqVG9SZWYpO1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0T3B0aW9ucywgV29ya2xldCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IFJ1bldvcmtsZXRTb3VyY2UgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9IGZyb20gJy4vZGVsYXlSdW5PbkJhY2tncm91bmQuanMnO1xuaW1wb3J0IHsgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBpbml0RXZlbnREZWxheSB9IGZyb20gJy4vZGVsYXlXb3JrbGV0RXZlbnQuanMnO1xuaW1wb3J0IHsgaW5pdEVvbUltcGwgfSBmcm9tICcuL2VvbUltcGwuanMnO1xuaW1wb3J0IHsgYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQgfSBmcm9tICcuL2V2ZW50UHJvcGFnYXRpb24uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZUN0eCB9IGZyb20gJy4vaHlkcmF0ZS5qcyc7XG5pbXBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH0gZnJvbSAnLi9qc0Z1bmN0aW9uTGlmZWN5Y2xlLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsIGluaXRXb3JrbGV0UmVmIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXQoKTogdm9pZCB7XG4gIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID0ge1xuICAgIF93b3JrbGV0TWFwOiB7fSxcbiAgICBfcmVmSW1wbDogaW5pdFdvcmtsZXRSZWYoKSxcbiAgICBfcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsOiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKSxcbiAgICBfaHlkcmF0ZUN0eDogaHlkcmF0ZUN0eCxcbiAgICBfZXZlbnREZWxheUltcGw6IGluaXRFdmVudERlbGF5KCksXG4gICAgX2VvbUltcGw6IGluaXRFb21JbXBsKCksXG4gICAgX3J1blJ1bk9uTWFpblRocmVhZFRhc2s6IHJ1blJ1bk9uTWFpblRocmVhZFRhc2ssXG4gIH07XG5cbiAgaWYgKGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCgpKSB7XG4gICAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyID0gbmV3IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyKCk7XG4gIH1cblxuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXRJbnRlcm5hbCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5ydW5Xb3JrbGV0ID0gcnVuV29ya2xldDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHdvcmtsZXQgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvIGJlIGV4ZWN1dGVkIGJ5IGBydW5Xb3JrbGV0KClgLlxuICogVGhpcyBpcyBjYWxsZWQgaW4gbGVwdXMuanMuXG4gKiBAcGFyYW0gX3R5cGUgd29ya2xldCB0eXBlLCAnbWFpbi10aHJlYWQnIG9yICd1aSdcbiAqIEBwYXJhbSBpZCB3b3JrbGV0IGhhc2hcbiAqIEBwYXJhbSB3b3JrbGV0IHdvcmtsZXQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrbGV0KF90eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pOiB2b2lkIHtcbiAgbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwW2lkXSA9IHdvcmtsZXQ7XG59XG5cbi8qKlxuICogRW50cmFuY2Ugb2YgYWxsIHdvcmtsZXQgY2FsbHMuXG4gKiBOYXRpdmUgZXZlbnQgdG91Y2ggaGFuZGxlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBjdHggd29ya2xldCBvYmplY3QuXG4gKiBAcGFyYW0gcGFyYW1zIHdvcmtsZXQgcGFyYW1zLlxuICogQHBhcmFtIG9wdGlvbnMgcnVuIHdvcmtsZXQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gcnVuV29ya2xldChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKCF2YWxpZGF0ZVdvcmtsZXQoY3R4KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKG9wdGlvbnM/LnNvdXJjZSA9PT0gUnVuV29ya2xldFNvdXJjZS5FVkVOVCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gcGFyYW1zWzBdO1xuICAgICAgY29uc3QgdCA9IChmaXJzdCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGU7XG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBldmVudDoke3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYE1haW5UaHJlYWRGdW5jdGlvbiBpZD0ke1N0cmluZyhjdHguX3drbHRJZCl9YCk7XG4gIH1cblxuICBpZiAoJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpIHtcbiAgICBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoY3R4Ll9sZXB1c1dvcmtsZXRIYXNoLCBwYXJhbXMpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gcnVuV29ya2xldEltcGwoY3R4LCBwYXJhbXMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBydW5Xb3JrbGV0SW1wbChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgY29uc3Qgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRDdHggJyArIGN0eC5fd2tsdElkLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQoY3R4LCB0cnVlKSxcbiAgKTtcbiAgY29uc3QgcGFyYW1zXzogQ2xvc3VyZVZhbHVlVHlwZVtdID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldFBhcmFtcycsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChwYXJhbXMgfHwgW10sIGZhbHNlKSxcbiAgKTtcblxuICBjb25zdCBbaGFzRXZlbnRNZXRob2RzLCBldmVudEN0eF0gPSBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZChwYXJhbXNfLCBvcHRpb25zKTtcblxuICBjb25zdCByZXN1bHQgPSBwcm9maWxlKCdydW5Xb3JrbGV0JywgKCkgPT4gd29ya2xldCguLi5wYXJhbXNfKSk7XG5cbiAgaWYgKGhhc0V2ZW50TWV0aG9kcykge1xuICAgIHJldHVybiB7XG4gICAgICByZXR1cm5WYWx1ZTogcmVzdWx0LFxuICAgICAgZXZlbnRSZXR1cm5SZXN1bHQ6IGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXb3JrbGV0KGN0eDogdW5rbm93bik6IGN0eCBpcyBXb3JrbGV0IHtcbiAgcmV0dXJuIHR5cGVvZiBjdHggPT09ICdvYmplY3QnICYmIGN0eCAhPT0gbnVsbCAmJiAoJ193a2x0SWQnIGluIGN0eCB8fCAnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCk7XG59XG5cbmNvbnN0IHdvcmtsZXRDYWNoZSA9IC8qI19fUFVSRV9fKi8gbmV3IFdlYWtNYXA8b2JqZWN0LCBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pPigpO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KGN0eDogV29ya2xldCwgaXNXb3JrbGV0OiB0cnVlKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuICBpc1dvcmtsZXQ6IGZhbHNlLFxuKTogQ2xvc3VyZVZhbHVlVHlwZVtdO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGlzV29ya2xldDogYm9vbGVhbixcbik6IENsb3N1cmVWYWx1ZVR5cGUgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bikge1xuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyB8fCBjdHggPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIGNvbnN0IHJlcyA9IHdvcmtsZXRDYWNoZS5nZXQoY3R4KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdvcmtsZXQgPSB7IG1haW46IGN0eCB9O1xuICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIod29ya2xldCwgMCwgY3R4KTtcblxuICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgd29ya2xldENhY2hlLnNldChjdHgsIHdvcmtsZXQubWFpbik7XG4gIH1cblxuICByZXR1cm4gd29ya2xldC5tYWluO1xufVxuXG5jb25zdCB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIgPSAoXG4gIHZhbHVlOiBDbG9zdXJlVmFsdWVUeXBlLFxuICBkZXB0aDogbnVtYmVyLFxuICBjdHg6IHVua25vd24sXG4pID0+IHtcbiAgY29uc3QgbGltaXQgPSAxMDAwO1xuICBpZiAoKytkZXB0aCA+PSBsaW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGVwdGggb2YgdmFsdWUgZXhjZWVkcyBsaW1pdCBvZiAnICsgbGltaXQgKyAnLicpO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2JqID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3Qgc3ViT2JqOiBDbG9zdXJlVmFsdWVUeXBlID0gb2JqW2tleV07XG4gICAgaWYgKHR5cGVvZiBzdWJPYmogIT09ICdvYmplY3QnIHx8IHN1Yk9iaiA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKC8qKiBpc0V2ZW50VGFyZ2V0ICovICdlbGVtZW50UmVmcHRyJyBpbiBzdWJPYmopIHtcbiAgICAgIG9ialtrZXldID0gbmV3IEVsZW1lbnQoc3ViT2JqWydlbGVtZW50UmVmcHRyJ10gYXMgRWxlbWVudE5vZGUpO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChzdWJPYmogaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIoc3ViT2JqLCBkZXB0aCwgY3R4KTtcblxuICAgIGNvbnN0IGlzV29ya2xldFJlZiA9ICdfd3ZpZCcgaW4gKHN1Yk9iaiBhcyBvYmplY3QpO1xuICAgIGlmIChpc1dvcmtsZXRSZWYpIHtcbiAgICAgIG9ialtrZXldID0gZ2V0RnJvbVdvcmtsZXRSZWZNYXAoXG4gICAgICAgIHN1Yk9iaiBhcyB1bmtub3duIGFzIFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc1dvcmtsZXQgPSAnX3drbHRJZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc1dvcmtsZXQpIHtcbiAgICAgIC8vIGBzdWJPYmpgIGlzIHdvcmtsZXQgY3R4LiBTaGFsbG93IGNvcHkgaXQgdG8gcHJldmVudCB0aGUgdHJhbnNmb3JtZWQgd29ya2xldCBmcm9tIHJlZmVyZW5jaW5nIGN0eC5cbiAgICAgIC8vIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSB2YWx1ZSBvZiBgd29ya2xldENhY2hlYCByZWZlcmVuY2luZyBpdHMga2V5LlxuICAgICAgb2JqW2tleV0gPSBseW54V29ya2xldEltcGwuX3dvcmtsZXRNYXBbKHN1Yk9iaiBhcyBXb3JrbGV0KS5fd2tsdElkXSFcbiAgICAgICAgLmJpbmQoeyAuLi5zdWJPYmogfSk7XG4gICAgICBvYmpba2V5XS5jdHhSZWYgPSBuZXcgV2Vha1JlZihzdWJPYmogYXMgb2JqZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0pzRm4gPSAnX2pzRm5JZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc0pzRm4pIHtcbiAgICAgIHN1Yk9ialsnX2V4ZWNJZCddID0gKGN0eCBhcyBXb3JrbGV0KS5fZXhlY0lkO1xuICAgICAgbHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcj8uYWRkUmVmKFxuICAgICAgICAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQhLFxuICAgICAgICBzdWJPYmosXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBpbml0V29ya2xldCB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IGluaXRBcGlFbnYgfSBmcm9tICcuL2FwaS9seW54QXBpLmpzJztcbmltcG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9IGZyb20gJy4vbGlzdGVuZXJzLmpzJztcbmltcG9ydCB7IGluaXRXb3JrbGV0IH0gZnJvbSAnLi93b3JrbGV0UnVudGltZS5qcyc7XG5cbmlmIChnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9PT0gdW5kZWZpbmVkKSB7XG4gIGluaXRXb3JrbGV0KCk7XG4gIGluaXRBcGlFbnYoKTtcbiAgaW5pdEV2ZW50TGlzdGVuZXJzKCk7XG59XG4iXSwibmFtZXMiOlsiQW5pbWF0aW9uIiwiX19FbGVtZW50QW5pbWF0ZSIsImVmZmVjdCIsIktleWZyYW1lRWZmZWN0IiwidGFyZ2V0Iiwia2V5ZnJhbWVzIiwib3B0aW9ucyIsIlRSQUNFX0xJTUlUIiwiREVGQVVMVF9GTFVTSF9MSU1JVCIsInRyYWNlIiwiZmx1c2hDb3VudEluV2luZG93IiwicmVzZXRTY2hlZHVsZWQiLCJ0cmlwcGVkRXJyb3IiLCJwdXNoVHJhY2UiLCJtYXJrZXIiLCJjb21wcmVzc1RyYWNlIiwibWFya2VycyIsIm91dCIsInByZXYiLCJjb3VudCIsImkiLCJjdXIiLCJtYWluVGhyZWFkRmx1c2hMb29wTWFyayIsIm1haW5UaHJlYWRGbHVzaExvb3BPbkZsdXNoTWljcm90YXNrIiwic2V0VGltZW91dCIsIm1haW5UaHJlYWRGbHVzaExvb3BSZXNldCIsImxpbWl0IiwidHJhY2VUZXh0IiwiRXJyb3IiLCJtYWluVGhyZWFkRmx1c2hMb29wUmVwb3J0IiwiZXJyb3IiLCJpc1Nka1ZlcnNpb25HdCIsIm1ham9yIiwibWlub3IiLCJfU3lzdGVtSW5mb19seW54U2RrVmVyc2lvbiIsImx5bnhTZGtWZXJzaW9uIiwidmVyc2lvbiIsIk51bWJlciIsIndpbGxGbHVzaCIsInNob3VsZEZsdXNoIiwic2V0U2hvdWxkRmx1c2giLCJ2YWx1ZSIsIkVsZW1lbnQiLCJuYW1lIiwiX19TZXRBdHRyaWJ1dGUiLCJfX0FkZElubGluZVN0eWxlIiwic3R5bGVzIiwiT2JqZWN0Iiwia2V5IiwiYXR0cmlidXRlTmFtZSIsIl9fR2V0QXR0cmlidXRlQnlOYW1lIiwiX19HZXRBdHRyaWJ1dGVOYW1lcyIsInNlbGVjdG9yIiwicmVmIiwiX19RdWVyeVNlbGVjdG9yIiwiX19RdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIl9fR2V0Q29tcHV0ZWRTdHlsZUJ5S2V5Iiwibm9ybWFsaXplZE9wdGlvbnMiLCJtZXRob2ROYW1lIiwicGFyYW1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfX0ludm9rZVVJTWV0aG9kIiwicmVzIiwiSlNPTiIsIl9fRmx1c2hFbGVtZW50VHJlZSIsIlBhZ2VFbGVtZW50IiwiX1BhZ2VFbGVtZW50IiwiX19HZXRQYWdlRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjc3NTZWxlY3RvciIsInBhZ2VFbGVtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImluaXRBcGlFbnYiLCJfbHlueF9jbGVhckludGVydmFsIiwibHlueCIsImdsb2JhbFRoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInJ1blJ1bk9uTWFpblRocmVhZFRhc2siLCJ0YXNrIiwicmVzb2x2ZUlkIiwicmV0dXJuVmFsdWUiLCJydW5Xb3JrbGV0IiwiV29ya2xldEV2ZW50cyIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiX2NvbnNvbGUiLCJfY29uc29sZTEiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsImV2ZW50IiwiZGF0YSIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsIl9mbk9iaiIsImRlbGF5SW5kaWNlcyIsImRldGFpbHMiLCJpbml0RXZlbnREZWxheSIsIk1hcCIsInJ1bkRlbGF5ZWRXb3JrbGV0IiwiY2xlYXJEZWxheWVkV29ya2xldHMiLCJkZWxheUV4ZWNVbnRpbEpzUmVhZHkiLCJoYXNoIiwibWFwIiwicGFyYW1WZWMiLCJ3b3JrbGV0IiwicGFyYW1zVmVjIiwibGVmdFBhcmFtc1ZlYyIsIl9maXJzdFBhcmFtX2N1cnJlbnRUYXJnZXQiLCJmaXJzdFBhcmFtIiwiaW5pdEVvbUltcGwiLCJFdmVudFJlc3VsdCIsImlzRXZlbnRPYmplY3QiLCJjdHgiLCJBcnJheSIsIlJ1bldvcmtsZXRTb3VyY2UiLCJhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCIsImV2ZW50Q3R4IiwiZXZlbnRPYmoiLCJfZXZlbnRDdHhfX2V2ZW50UmV0dXJuUmVzdWx0IiwiaHlkcmF0ZUN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJfZmlyc3RTY3JlZW5DdHhPYmpfa2V5X2N0eFJlZiIsImZpcnN0U2NyZWVuVmFsdWUiLCJyZWZJZCIsImx5bnhXb3JrbGV0SW1wbCIsImZuT2JqcyIsImZpcnN0U2NyZWVuRm5PYmpzIiwiZm5OYW1lIiwiZmlyc3RTY3JlZW5Gbk9iaiIsImluZGV4IiwiSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiLCJvYmpUb1JlZiIsIl90aGlzX2V4ZWNJZFJlZkNvdW50X2dldCIsInJjIiwiU2V0IiwiV2Vha1NldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsImZpcnN0IiwidCIsIlN0cmluZyIsInJ1bldvcmtsZXRJbXBsIiwidHJhbnNmb3JtV29ya2xldCIsInBhcmFtc18iLCJoYXNFdmVudE1ldGhvZHMiLCJyZXN1bHQiLCJ3b3JrbGV0Q2FjaGUiLCJXZWFrTWFwIiwiaXNXb3JrbGV0IiwidHJhbnNmb3JtV29ya2xldElubmVyIiwiZGVwdGgiLCJvYmoiLCJzdWJPYmoiLCJpc1dvcmtsZXRSZWYiLCJXZWFrUmVmIiwiaXNKc0ZuIiwiX2x5bnhXb3JrbGV0SW1wbF9fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBWU8sTUFBTUE7UUFXSixTQUFlO1lBRXBCLE9BQU9DLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUE0QixJQUFJLENBQUMsRUFBRTthQUFDO1FBQzFGO1FBRU8sUUFBYztZQUVuQixPQUFPQSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFBMkIsSUFBSSxDQUFDLEVBQUU7YUFBQztRQUN6RjtRQUVPLE9BQWE7WUFFbEIsT0FBT0EsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBQTBCLElBQUksQ0FBQyxFQUFFO2FBQUM7UUFDeEY7UUFFUSxRQUFjO1lBRXBCLE9BQU9BLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUVsRCxJQUFJLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzthQUNwQjtRQUNIO1FBN0JBLFlBQVlDLE1BQXNCLENBQUU7WUFIcEMsdUJBQWdCLFVBQWhCO1lBQ0EsdUJBQWdCLE1BQWhCO1lBR0UsSUFBSSxDQUFDLE1BQU0sR0FBR0E7WUFDZCxJQUFJLENBQUMsRUFBRSxHQUFHLCtCQUErQkYsVUFBVSxLQUFLO1lBQ3hELElBQUksQ0FBQyxLQUFLO1FBQ1o7SUEwQkY7SUFsQ0UsaUJBRFdBLFdBQ0osU0FBUTs7Ozs7Ozs7Ozs7SUNSVixNQUFNRztRQUtYLFlBQ0VDLE1BQWUsRUFDZkMsU0FBNEMsRUFDNUNDLE9BQXdD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{
|
|
1
|
+
(()=>{var e,t,n;let r,l,i;function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a{cancel(){return __ElementAnimate(this.effect.target.element,[3,this.id])}pause(){return __ElementAnimate(this.effect.target.element,[2,this.id])}play(){return __ElementAnimate(this.effect.target.element,[1,this.id])}start(){return __ElementAnimate(this.effect.target.element,[0,this.id,this.effect.keyframes,this.effect.options])}constructor(e){o(this,"effect",void 0),o(this,"id",void 0),this.effect=e,this.id="__lynx-inner-js-animation-"+a.count++,this.start()}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}o(a,"count",0);class u{constructor(e,t,n){s(this,"target",void 0),s(this,"keyframes",void 0),s(this,"options",void 0),this.target=e,this.keyframes=t,this.options=n}}function c(e,t){var n;let r=(null!=(n=SystemInfo.lynxSdkVersion)?n:"1.0").split(".");return Number(r[0])>e||Number(r[0])==e&&Number(r[1])>t}let d=!1,f=!0;class y{setAttribute(e,t){__SetAttribute(this.element,e,t),this.flushElementTree()}setStyleProperty(e,t){__AddInlineStyle(this.element,e,t),this.flushElementTree()}setStyleProperties(e){for(let t in e)__AddInlineStyle(this.element,t,e[t]);this.flushElementTree()}getAttribute(e){return __GetAttributeByName(this.element,e)}getAttributeNames(){return __GetAttributeNames(this.element)}querySelector(e){let t=__QuerySelector(this.element,e,{});return t?new y(t):null}querySelectorAll(e){return __QuerySelectorAll(this.element,e,{}).map(e=>new y(e))}getComputedStyleProperty(e){if(!c(3,4))throw Error("getComputedStyleProperty requires Lynx sdk version 3.5");if(!e)throw Error("getComputedStyleProperty: key is required");return __GetComputedStyleByKey(this.element,e)}animate(e,t){return new a(new u(this,e,"number"==typeof t?{duration:t}:null!=t?t:{}))}invoke(e,t){return new Promise((n,r)=>{__InvokeUIMethod(this.element,e,null!=t?t:{},e=>{0===e.code?n(e.data):r(Error("UI method invoke: "+JSON.stringify(e)))}),this.flushElementTree()})}flushElementTree(){!d&&f&&(d=!0,Promise.resolve().then(()=>{d=!1,__FlushElementTree()}))}constructor(e){var t,n;n=void 0,(t="element")in this?Object.defineProperty(this,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):this[t]=n,Object.defineProperty(this,"element",{get:()=>e})}}class m{static get(){return null!=m.pageElement||(m.pageElement=__GetPageElement()),m.pageElement}}function h(e,t,n){let r;try{r=runWorklet(e,t)}finally{lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.FunctionCallRet",data:JSON.stringify({resolveId:n,returnValue:r})})}}t=void 0,(e="pageElement")in m?Object.defineProperty(m,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):m[e]=t;let _=(e,t)=>({current:t,_wvid:e}),p=e=>{let t,n=e._wvid;return n<0?(t=r._firstScreenWorkletRefMap[n])||(t=r._firstScreenWorkletRefMap[n]=_(n,e._initValue)):t=r._workletRefMap[n],t};function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t,n){lynxWorkletImpl._workletMap[t]=n}let v=new WeakMap;function I(e,t){if("object"!=typeof e||null===e)return e;if(t){let t=v.get(e);if(t)return t}let n={main:e};return b(n,0,e),t&&v.set(e,n.main),n.main}let b=(e,t,n)=>{if(++t>=1e3)throw Error("Depth of value exceeds limit of 1000.");if("object"==typeof e&&null!==e)for(let l in e){let i=e[l];if("object"==typeof i&&null!==i){if("elementRefptr"in i){e[l]=new y(i.elementRefptr);continue}if(!(i instanceof y)){if(b(i,t,n),"_wvid"in i){e[l]=p(i);continue}if("_wkltId"in i){e[l]=lynxWorkletImpl._workletMap[i._wkltId].bind({...i}),e[l].ctxRef=new WeakRef(i);continue}if("_jsFnId"in i){var r;i._execId=n._execId,null==(r=lynxWorkletImpl._jsFunctionLifecycleManager)||r.addRef(n._execId,i);continue}}}}};if(void 0===globalThis.lynxWorkletImpl){let e,t;globalThis.lynxWorkletImpl={_workletMap:{},_refImpl:r={_workletRefMap:{},_firstScreenWorkletRefMap:{},updateWorkletRef:function(e,t){p(e).current=t?new y(t):null},updateWorkletRefInitValueChanges:function(e){e.forEach(([e,t])=>{r._workletRefMap[e]||(r._workletRefMap[e]=_(e,t))})},clearFirstScreenWorkletRefMap:function(){r._firstScreenWorkletRefMap={}}},_runOnBackgroundDelayImpl:l={delayedBackgroundFunctionArray:[],delayRunOnBackground:function(e,t){var n;l.delayedBackgroundFunctionArray.push({task:t}),(null!=(n=e._delayIndices)?n:e._delayIndices=[]).push(l.delayedBackgroundFunctionArray.length-1)},runDelayedBackgroundFunctions:function(){for(let e of l.delayedBackgroundFunctionArray)e.jsFnHandle&&e.task(e.jsFnHandle._jsFnId,e.jsFnHandle._execId);l.delayedBackgroundFunctionArray.length=0}},_hydrateCtx:function(e,t){!function e(t,n,r){var l,i,o;if(t&&"object"==typeof t&&n&&"object"==typeof n&&(!t._wkltId||t._wkltId===n._wkltId))for(let a in t)if("_wvid"===a){l=t[a],"_initValue"in(i=n)||(lynxWorkletImpl._refImpl._workletRefMap[l]=i)}else if("_jsFn"===a)!function(e,t,n){for(let r in e){let l=e[r],i=t[r];if(!(null==i?void 0:i._delayIndices)){i&&(i._isFirstScreen=!1,i._execId=n,Object.assign(i,l));continue}for(let e of i._delayIndices){let t=lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[e];l._execId=n,t.jsFnHandle=l}}}(t[a],n[a],r);else{let l="function"==typeof n[a]?null==(o=n[a].ctxRef)?void 0:o.deref():n[a];e(t[a],l,r)}}(e,t,e._execId)},_eventDelayImpl:i={_delayedWorkletParamsMap:new Map,runDelayedWorklet:function(e,t){(()=>{let n=i._delayedWorkletParamsMap.get(e._wkltId);if(void 0===n)return;let r=[];n.forEach(n=>{var l;let i=n[0];(null==i||null==(l=i.currentTarget)?void 0:l.elementRefptr)===t?setTimeout(()=>{runWorklet(e,n)},0):r.push(n)}),i._delayedWorkletParamsMap.set(e._wkltId,r)})()},clearDelayedWorklets:function(){i._delayedWorkletParamsMap.clear()}},_eomImpl:{setShouldFlush:function(e){f=e}},_runRunOnMainThreadTask:h},c(2,15)&&(globalThis.lynxWorkletImpl._jsFunctionLifecycleManager=new class e{addRef(e,t){var n;this.retainedObjects.has(t)||(this.retainedObjects.add(t),this.execIdRefCount.set(e,(null!=(n=this.execIdRefCount.get(e))?n:0)+1),this.registry.register(t,e))}removeRef(e){let t=this.execIdRefCount.get(e);t>1?this.execIdRefCount.set(e,t-1):(this.execIdRefCount.delete(e),this.execIdSetToFire.add(e),this.willFire||(this.willFire=!0,Promise.resolve().then(()=>{this.fire()})))}fire(){lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.releaseBackgroundWorkletCtx",data:Array.from(this.execIdSetToFire)}),this.execIdSetToFire.clear(),this.willFire=!1}constructor(){k(this,"execIdRefCount",new Map),k(this,"execIdSetToFire",new Set),k(this,"retainedObjects",new WeakSet),k(this,"willFire",!1),k(this,"registry",void 0),this.registry=new FinalizationRegistry(this.removeRef.bind(this))}}),globalThis.registerWorklet=g,globalThis.registerWorkletInternal=g,globalThis.runWorklet=function(e,t,n){var r,l,o;if("object"==typeof(r=e)&&null!==r&&("_wkltId"in r||"_lepusWorkletHash"in r)){let r,a;return"_lepusWorkletHash"in e?void(l=e._lepusWorkletHash,o=t,(a=(r=i._delayedWorkletParamsMap).get(l))?a.push(o):r.set(l,[o])):function(e,t,n){let r=(e._wkltId,I(e,!0)),l=I(t||[],!1),[i,o]=function(e,t){if(!Array.isArray(e)||"object"!=typeof e[0]||null===e[0]||(!t||1!==t.source)&&1)return[!1,{}];let n={},r=e[0];return r.stopPropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|1},r.stopImmediatePropagation=function(){var e;n._eventReturnResult=(null!=(e=n._eventReturnResult)?e:0)|2},[!0,n]}(l,n),a=r(...l);return i?{returnValue:a,eventReturnResult:o._eventReturnResult}:a}(e,t,n)}},lynx.querySelector=function(e){let t=m.get();if(!t)return null;let n=__QuerySelector(t,e,{});return n?new y(n):null},lynx.querySelectorAll=function(e){let t=m.get();return t?__QuerySelectorAll(t,e,{}).map(e=>new y(e)):[]},globalThis.setTimeout=lynx.setTimeout,globalThis.setInterval=lynx.setInterval,globalThis.clearTimeout=lynx.clearTimeout,globalThis.clearInterval=null!=(n=lynx.clearInterval)?n:lynx.clearTimeInterval,e=lynx.requestAnimationFrame,lynx.requestAnimationFrame=globalThis.requestAnimationFrame=t=>{if(!c(2,15))throw Error("requestAnimationFrame in main thread script requires Lynx sdk version 2.16");return e(t)},globalThis.cancelAnimationFrame=lynx.cancelAnimationFrame,(t=lynx.getJSContext()).addEventListener("Lynx.Worklet.runWorkletCtx",e=>{let t=JSON.parse(e.data);h(t.worklet,t.params,t.resolveId)}),t.addEventListener("Lynx.Worklet.releaseWorkletRef",e=>{var t;t=e.data.id,delete r._workletRefMap[t]})}})();
|
|
@@ -4,20 +4,12 @@ function __webpack_require__(moduleId) {
|
|
|
4
4
|
var cachedModule = __webpack_module_cache__[moduleId];
|
|
5
5
|
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
6
6
|
var module = __webpack_module_cache__[moduleId] = {
|
|
7
|
-
id: moduleId,
|
|
8
|
-
loaded: false,
|
|
9
7
|
exports: {}
|
|
10
8
|
};
|
|
11
9
|
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
12
|
-
module.loaded = true;
|
|
13
10
|
return module.exports;
|
|
14
11
|
}
|
|
15
12
|
__webpack_require__.m = __webpack_modules__;
|
|
16
|
-
(()=>{
|
|
17
|
-
__webpack_require__.add = function(modules) {
|
|
18
|
-
Object.assign(__webpack_require__.m, modules);
|
|
19
|
-
};
|
|
20
|
-
})();
|
|
21
13
|
(()=>{
|
|
22
14
|
__webpack_require__.n = (module)=>{
|
|
23
15
|
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
@@ -28,11 +20,20 @@ __webpack_require__.m = __webpack_modules__;
|
|
|
28
20
|
};
|
|
29
21
|
})();
|
|
30
22
|
(()=>{
|
|
31
|
-
__webpack_require__.d = (exports,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
__webpack_require__.d = (exports, getters, values)=>{
|
|
24
|
+
var define = (defs, kind)=>{
|
|
25
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
[kind]: defs[key]
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
define(getters, "get");
|
|
31
|
+
define(values, "value");
|
|
32
|
+
};
|
|
33
|
+
})();
|
|
34
|
+
(()=>{
|
|
35
|
+
__webpack_require__.add = function(modules) {
|
|
36
|
+
Object.assign(__webpack_require__.m, modules);
|
|
36
37
|
};
|
|
37
38
|
})();
|
|
38
39
|
(()=>{
|
|
@@ -170,14 +170,8 @@ const initElementTree = ()=>{
|
|
|
170
170
|
return e.dataset;
|
|
171
171
|
}
|
|
172
172
|
__RemoveElement(parent, child) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (ch === child) {
|
|
176
|
-
parent.removeChild(ch);
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
ch = ch.nextSibling;
|
|
180
|
-
}
|
|
173
|
+
if (child.parentNode !== parent) throw new Error(`child ${child.$$uiSign} is not in parent ${parent.$$uiSign}, cannot remove it!`);
|
|
174
|
+
child.parentNode.removeChild(child);
|
|
181
175
|
}
|
|
182
176
|
__InsertElementBefore(parent, child, ref) {
|
|
183
177
|
if (void 0 === ref) parent.appendChild(child);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VitestPackageInstaller } from "vitest/node";
|
|
2
2
|
import node_path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { createRequire } from "
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
5
|
const vitest_filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const vitest_dirname = node_path.dirname(vitest_filename);
|
|
7
7
|
const vitest_require = createRequire(import.meta.url);
|
|
@@ -234,7 +234,18 @@ function testingLibraryPlugin(options) {
|
|
|
234
234
|
...runtimeAlias,
|
|
235
235
|
...preactAlias,
|
|
236
236
|
...reactAlias
|
|
237
|
-
]
|
|
237
|
+
],
|
|
238
|
+
server: {
|
|
239
|
+
deps: {
|
|
240
|
+
inline: [
|
|
241
|
+
/preact/,
|
|
242
|
+
runtimeOSSPkgName,
|
|
243
|
+
...runtimePkgName !== runtimeOSSPkgName ? [
|
|
244
|
+
runtimePkgName
|
|
245
|
+
] : []
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
238
249
|
}
|
|
239
250
|
}),
|
|
240
251
|
configResolved (_config) {
|